我有一個帶模板參數T的類模板Templ,並且Templ類有一個名爲obj的T類數據成員。我寫的參數轉發到OBJ構造器的可變參數的構造函數模板:C++用於類模板的初始化程序列表構造函數
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
是做什麼的。他們有像我這樣的可變參數函數,但是他們沒有覆蓋init-list。因爲某些原因。
所以第一個問題:爲什麼?我的意思是,如果我用init-list ctor使用某個類T,然後使用std::list<T>
?爲什麼list :: emplace沒有一個帶有initializer_list的版本?也許有一個很好的理由我應該這樣做......所以我想知道。
另外,無論STL做什麼 - 我應該提供一個init-list ctor作爲優秀的設計嗎?我的意思是,它就像變種ctor一樣,對吧?允許用戶選擇任何類型或類別T用於Templ <>,並直接調用爲T定義的任何ctor。即使它是一個採用初始列表的ctor。
你的第一個問題是一個很好的問題,但其他三個問題應該是單獨的帖子。 – 2013-02-11 02:32:54
@VaughnCato我把他們中的一個分開了。我可以在20分鐘後發佈一次,所以我無法修復其餘的...直到下一次 – cfa45ca55111016ee9269f0a52e771 2013-02-11 03:12:49
完成,現在只有1個問題 – cfa45ca55111016ee9269f0a52e771 2013-02-11 10:52:47