示例:
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.
是否有一种机制允许将变量参数列表传递给包装类的构造函数? (我知道这是一个愚蠢的例子,只是为了说清楚)
答案 0 :(得分:4)
这是完美转发的经典示例:
template <typename... Args>
Wrapper(Args&&... args) :
Wrapee(new T(std::forward<Args>(args)...)) {}
注意:我建议您使用智能指针而不是原始指针(或者首先使用Wrapper
代替)。