2011-09-23 82 views
2

給定一個模板類:模板類型構造參數

template<class T> 
class Foo 
{ 
public: 
    void FunctionThatCreatesT() 
    { 
     _object = new T; 
    } 
private: 
    shared_ptr<T> _object; 
} 

是否有可能以某種方式通過一組構造函數的參數對於T來富(也許當富構造),使得當它創建富可以使用它們T'一個C++ 11唯一的解決方案是好的(所以,可變參數在桌子上)。

回答

3

準確地說,可變模板和完美轉發通過std::forward

#include <memory> 
#include <utility> 

template<class T> 
class Foo 
{ 
public: 
    template<class... Args> 
    void FunctionThatCreatesT(Args&&... args) 
    { 
     _object = new T(std::forward<Args>(args)...); 
    } 
private: 
    std::shared_ptr<T> _object; 
} 

對於如何工作的列表,請參閱this excellent answer

你可以在C++ 03中使用許多重載函數模擬這個限制版本,但是..它是一個PITA。

此外,這只是從內存,所以沒有測試完成。可能包含一個錯誤的錯誤。