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

Passing variable amount of parameters to a template class

本文关键字:参数传递      更新时间:2023-10-16

示例:

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.

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

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

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

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