为没有继承的模板参数类提供构造函数

时间:2013-02-10 21:02:58

标签: c++ templates c++11 constructor

我有一个C ++类模板。它采用模板参数类T并将类型为T的对象存储为可通过名为data()的方法访问的私有成员。下面的代码演示了它。我希望我的类模板提供一个方便的构造函数,它考虑了类型T.例如,一个构造函数,它将一些T的字段作为参数,并用它们的值初始化封装的T对象。

这样做的一种方法是让用户从模板实例化派生并在那里添加他们自己的构造函数,但我自然希望有一种方法来提供ctors而不会让用户编写派生类。

template <class T>
class Templ
{
public:
     T& data();
     const T& data() const;
private:
     T obj;
};

现在,如果用户想要一个Convenientve构造函数,他们必须派生Templ:

class MyClass : public Templ<MyData>
{
public:
     MyClass (int size, MyClass* parent, float temperature, std::string name);
};

我读了一些C ++ 11的东西,并且有关于像STL这样的构造函数模板有std :: list :: emplace()方法集的想法,但我不确定什么是常见的最佳实践解决方案。

1 个答案:

答案 0 :(得分:6)

是的,C ++ 11可变转发完美转发就是你想要的:

template <class T>
class Templ
{
public:
     template<typename... Args>
     explicit Templ(Args&&... args) : obj(std::forward<Args>(args)...) {}

     T& data();
     const T& data() const;
private:
     T obj;
};

这会将Templ构造函数的任何参数转发给T构造函数。

但是我想知道,为什么甚至有这个课程呢?你想做什么?