将可变数量的参数传递给模板类

时间:2014-12-27 11:25:49

标签: c++ templates

示例:

template <class T>
class Wrapper
{
public:

        Wrapper() { Wrapee = new T; };
        ~Wrapper(){ delete Wrapee; };

    T*  operator->() { return Wrapee; };    

private:

    T*  Wrapee;
};

现在我们明白了:

Wrapper<ClassA> WrappedA;   //ClassA's constructor does not take arguments, so this is ok.
Wrapper<ClassB> WrappedB;   //ClassB's constructor needs arguments, error.

是否有一种机制允许将变量参数列表传递给包装类的构造函数? (我知道这是一个愚蠢的例子,只是为了说清楚)

1 个答案:

答案 0 :(得分:4)

这是完美转发的经典示例:

template <typename... Args>
Wrapper(Args&&... args) :
  Wrapee(new T(std::forward<Args>(args)...)) {}

注意:我建议您使用智能指针而不是原始指针(或者首先使用Wrapper代替)。