有没有办法处理模板类中可变数量的参数?

时间:2020-03-06 14:56:43  来源:igfitidea点击:

我有一组回调类,用于处理具有可变数量的参数的回调。现在,我有大约6个不同的实例来处理不同数量的参数。有没有办法使一个实例能够处理可变数量的参数?最终,我希望每个参数都是POD类型,类指针或者结构指针。有任何想法吗?

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将支持可变参数模板。

通过使用Boost Bind来回避此问题怎么样?我们可以使代码接受单个参数,也可以根本不接受,然后在调用站点绑定所需的参数。

C ++ 0x可变模板是我们最好的选择,但是使用它们还需要一段时间。

如果我们今天需要类型序列,请查看MPL的类型向量以及其他类型序列类型。它是Boost库的一部分。它允许我们提供一个模板参数,该参数是一个类型序列,而不仅仅是一个类型。