정적 포인터 초기화 ... const 포인터를 사용하여 오버로드 된 템플릿 함수 멤버 함수. 할 수있는 방법이 있습니까 (C++ 03 표준 코드)? 정적 배열이 파일 범위에서 초기화해야하기 때문에
1. 템플릿 매개 변수와 pmfi 내가 템플릿에 액세스 할 알고 전체 자격 (유일한 방법이어야합니다 내가 템플릿 클래스과부하가 걸린 템플릿 멤버 함수에 대한 const 포인터의 정적 배열
template <class T1, class U1, typename R1> class Some_class { public: typedef T1 T; typedef U1 U; typedef R1 R; R operator()(T& v) { /* dereference pointer to a derived class (U), overloaded member function (U::f) */ }; private: static R (U::* const pmfi[/* # of overloaded functions in U */])(T&); }; Used as template <class BASE, typename RET> class Other_class : public Some_class<BASE, Other_class<BASE, RET>, RET> { RET f(/* type derived from BASE */) {} RET f(/* other type derived from BASE */) {} RET f(/* another type derived from BASE */) {} ... }; Question: how can I initialize de array pmfi (no typedefs, please)?
사항이있는 경우, 의미 클래스 범위 밖에있는 매개 변수는 typedef ...).
2. 지금까지 너무 좋아. 컴파일러에 문제 없음 (Comeau 4.3.10.1). {...} 이니셜 라이저 목록을 채울 때 문제가 발생합니다.
2.1. 컴파일러는 필자가 무엇을하든 템플릿 인수 목록이 누락되었다고 불평합니다.
2.2. 올바른 오버로드 된 U :: f 함수를 선택하는 방법을 모르겠습니다.
BTW는 boost.preprocessor 목록에서 "점프 테이블"생성기의 일종입니다. 구현하려는 코드는 당연히 훨씬 더 복잡하지만이 코드는 그의 본질입니다. 당신이 '수'를 받아 적절한 적절한 멤버의 주소 식을 산출하는 매크로를 필요 당신이 표시 한 방법으로 BOOST_PP_ENUM
을 사용하려면 어떤 도움
안녕하세요, Charles 1. 실제로 Boost.preprocessor의 "seq"를 사용하여 BOOST_PP_ENUM을 확장하고 형식 목록 (프로세스에서 사용되는)을 생성합니다. 2. 실제 코드가 아닙니다.코드의 식별자는 템플릿 args의 typedef로 사용해야합니다. R, T, U가 Some_class (나머지는 잊어 버림)의 템플릿 args의 typedef이면 배열 정의는 Some_class :: R (Some_class :: U :: * Some_class :: pmfi []) (Some_class :: T &) = {...}; Q : 어떤 부분의 sintax 여야합니까? A : & Some_class :: U :: f (f로 오버로드 되었습니까?) U가 그 자체가 템플릿이라면, 어떻게 말합니까? Comeau가 내 시도에 동의하지 않습니다. –
U는 Some_class의 템플릿 매개 변수이지만 U가 클래스 템플릿을 나타내는 경우 U :: f 함수의 주소를 작성해야하는 방법은 무엇입니까? & U :: f? 오른쪽으로 오버로드 된 f를 선택하는 방법은 무엇입니까? 알았어. BTW, 심지어 1 elem 배열 (그래서 과부하) comau 컴파일러는 위의 sintax 허용하지 않습니다. –
"실제 코드가 아닙니다." 그런 다음 실제 코드를 게시하고 해결하려는 문제를 설명 할 수 있습니다. 솔루션은 지나치게 복잡해 보이지만 문제가 무엇인지 모른 채 말하기는 어렵습니다. 특히 템플릿 매개 변수 'U'(또는 지금은 'U1'입니까?)와'Types' 및 metafunction 'Length'가 정의 된 곳에 사용할 샘플 클래스를 게시 할 수 있습니까? 포스트 편집을하면,'Some_class :: pmfi'의 선언에 오류가있는 것 같습니다. –