2011-09-23 85 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。

此外,这只是从内存,所以没有测试完成。可能包含一个错误的错误。