3

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

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

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

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

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

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

4

1 回答 1

7

是的,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;
};

这会将构造函数的任何参数转发TemplT构造函数。

但我想知道,为什么还要有这门课呢?你想做什么?

于 2013-02-10T21:06:42.793 回答