【发布时间】:2013-02-11 02:14:19
【问题描述】:
我有一个带有模板参数 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 可能是一个带有 init-list 构造函数的类,我希望它可以通过 Templ 访问。所以我检查了std::list::emplace 和std::make_shared 做了什么。他们有一个像我一样的可变参数函数,但他们没有覆盖初始化列表。不知为何。
所以第一个问题:为什么?我的意思是,如果我使用带有 init-list ctor 的某个类 T,然后我使用 std::list<T> 怎么办?为什么 list::emplace 没有采用 initializer_list 的版本?也许我也应该这样做是有充分理由的……所以我想知道。
另外,不管 STL 做什么——我应该提供一个 init-list ctor 作为好的设计吗?我的意思是,它就像可变参数 ctor,对吧?允许用户选择任何类型或类 T 与 Templ 一起使用并直接调用为 T 定义的任何 ctor。即使它是一个采用 init-list 的 ctor。
【问题讨论】:
-
你的第一个问题是一个很好的问题,但是其他三个问题应该是单独的帖子。
-
@VaughnCato 我把其中一个分开了。我可以在 20 分钟内发布一次,所以我无法修复其余的……直到下一次
-
完成,现在只有 1 个问题
标签: c++ c++11 variadic-templates initializer-list make-shared