我有一个带有模板参数 T 的类模板 Templ,而 Templ 类有一个类型为 T 的数据成员,称为 obj。我写了一个可变参数构造函数模板,它将参数转发给 obj 的构造函数:
template <class T>
class Templ
{
public:
template <class... Args> explicit Templ (Args&&... args)
: obj (std::forward<Args>(args)...)
{
}
private:
T obj;
};
现在我意识到类型 T 可能是一个带有初始化列表构造函数的类,我希望它可以通过 Templ 访问。所以我检查了什么std::list::emplace
和std::make_shared
做什么。他们有一个像我一样的可变参数函数,但他们没有覆盖初始化列表。由于某些原因。
所以第一个问题:为什么?我的意思是,如果我将某个类 T 与一个 init-list ctor 一起使用,然后我使用std::list<T>
? 为什么 list::emplace 没有采用 initializer_list 的版本?也许我也应该这样做是有充分理由的……所以我想知道。
另外,不管 STL 做什么——我应该提供一个 init-list ctor 作为好的设计吗?我的意思是,它就像可变参数 ctor,对吧?允许用户选择任何类型或类 T 与 Templ<> 一起使用并直接调用为 T 定义的任何 ctor。即使它是一个采用 init-list 的 ctor。