템플릿 클래스에서 가변 수의 매개 변수를 처리하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/154780

문제

가변 수의 매개 변수로 콜백을 처리하는 데 사용하는 콜백 클래스 세트가 있습니다. 지금은 다른 인수의 인수를 처리하기 위해 약 6 개의 다른 사례를 가지고 있습니다. 가변 수의 인수를 처리 할 수있는 것보다 하나의 인스턴스를 만드는 방법이 있습니까? 궁극적으로 각 매개 변수를 포드 유형 또는 클래스 포인터 또는 구조 포인터로 만들고 싶습니다. 어떤 아이디어?

template <class T>
class kGUICallBackPtr
{
public:
    kGUICallBackPtr() {m_obj=0;m_func=0;}
    void Set(void *o,void (*f)(void *,T *));
    inline void Call(T *i) {if(m_func) m_func(m_obj,i);}
    inline bool IsValid(void) {return (m_func!=0);}
private:
    void *m_obj;
    void (*m_func)(void *,T *);
};


template <class T,class U>
class kGUICallBackPtrPtr
{
public:
    kGUICallBackPtrPtr() {m_obj=0;m_func=0;}
    void Set(void *o,void (*f)(void *,T *,U *));
    inline void Call(T *i, U *j) {if(m_func) m_func(m_obj,i,j);}
    inline bool IsValid(void) {return (m_func!=0);}
private:
    void *m_obj;
    void (*m_func)(void *,T *,U *j);
};
도움이 되었습니까?

해결책

아직 언어 자체는 아니지만 C ++ 0X는 지원합니다. 변수 템플릿.

다른 팁

C ++ 0X Variatdic 템플릿이 최선의 방법이지만 사용하기까지는 시간이 걸립니다.

오늘 일련의 유형이 필요한 경우 MPL을 살펴보십시오. 벡터 유형 및 기타 유형 시퀀스 유형. 그것은의 일부입니다 후원 도서관. 단일 유형 대신 일련의 유형 인 템플릿 인수를 제공 할 수 있습니다.

사용을 통해이 문제를 회피하는 것은 어떻습니까? 부스트 바인드? 코드가 단일 인수 또는 전혀 아무것도 수락하고 전화 사이트에서 필요한 인수를 바인딩 할 수 있습니다.

나의 첫 번째 선택은 boost :: bind, boost :: function 또는 std :: bind/std :: function 및/또는 c ++ 11 lambda를 사용하여 목표를 달성하는 것입니다. 그러나 자신의 functor를 굴려야한다면 Boost Fusion을 사용하여 단일 템플릿 인수를 취하는 '융합 untictor'를 만듭니다.

http://www.boost.org/doc/libs/1_41_0/libs/fusion/doc/html/fusion/functional/generation/functions/mk_fuded.html

궁극적으로 이러한 모든 라이브러리는 사전 프로세서 매크로를 사용하여 다양한 템플릿이 부족하여 가능한 모든 옵션을 열거합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top