그래서,이 고급 C++ 프로그래머들에게 아주 간단한 질문입니다 생각,하지만 난 하나도 해요 : C++ 사용 11enum을 키로 사용하고 다양한 시그니처를 값으로 사용하여 std :: map을 선언하는 방법은 무엇입니까?
은, 우아한 방법 무엇 키로 범위 enum
를 사용하는 std::map
을 구현하는 그리고 값으로 변화하는 서명이 수학 함수를 취합니다
간단한 예 - 모든 숫자 유형 또는 함수 인수의 수 수 있지만이 내 사용 사례에 대한 전형적인 수 :
enum class FUNCS
{
DOUBLE_FUNC1, DOUBLE_FUNC2, INT_FUNC3, INT_FUNC4
};
일부를 functi 기능 :
mMAP[FUNCS::DOUBLE_FUNC1]=f1;
mMAP[FUNCS::DOUBLE_FUNC2]=f2;
mMAP[FUNCS::INT_FUNC3]=f3;
mMAP[FUNCS::INT_FUNC4]=f4;
사용지도 :
mMAP[FUNCS::DOUBLE_FUNC1](a,b,d);
mMAP[FUNCS::INT_FUNC3](a,d,c,e);
지도를 초기화 :
double f1(int a, int b, double d);
double f2(int a, int b, int c, int d);
int f3(int a, double d, int c, double e);
int f4(int a, double d, int c);
내가 추구하는 기능은 다음과 같이 작동하는 표준 : :지도입니다 일부 유형 변환과 관련된 절충안에는 함수를 사용할 수 있습니다.
double f1(int a, int b, double d);
double f2(int a, int b, int c, int d);
double f3(int a, double d, int c, double e);
double f4(int a, double d, int c);
어떻게 나에게이 기능을 제공하는지도를 선언 할 수 있습니다 : 모든 double
을 반환 인수를 변화와? 나는 아마도 그 키들에 그 함수들을 직접적으로 매핑 할 수 없다는 것을 이해한다 - 나는이 목표를 달성하기 위해 일종의 추상화/간접 접근법을 필요로한다. 그리고 나는 가변성 함수/템플릿을 사용하여 수행 할 수 있다고 생각한다. Variadic arguments과 Parameter pack을 보라. 이 작업을 수행하는 방법에 대해서는 명확하지 않습니다.
그 사이에 나는 std::tuple
에 가능한 모든 유형의 값을 포함하는 함수 포인터 유형을 사용하여 결과에 대한 참조와 함께 인수를 작성한 다음 매핑 된 각 fuction에서 적절한 구성원을 사용합니다 튜플의 지저분한!
여기 내 목표 유형 boost::any
의 데이터를 사용하여 차트는 GUI 기반 상태 기계는 표현 열거 값을 기준으로지도를 통해 해당 함수를 호출 생성하는 차트 라이브러리에 이러한 다양한 기능에서 데이터를 전송하는 것입니다 상태 머신에서 실행하고 해당 기능의 데이터를 기반으로 차트를 생성합니다.
각 'FUNCS'값은 단일 고유 함수 유형에 해당합니까? –
@ T.C. - 아뇨. 그랬다면 의심의 여지가 없어! 읽어주세요. :) – Vector
즉,'mMAP [FUNCS :: DOUBLE_FUNC1] = f2;'라고 쓸 수 있을까요? –