2014-12-27 35 views
3

例子:傳遞的參數變量量模板類

template <class T> 
class Wrapper 
{ 
public: 

     Wrapper() { Wrapee = new T; }; 
     ~Wrapper(){ delete Wrapee; }; 

    T* operator->() { return Wrapee; };  

private: 

    T* Wrapee; 
}; 

現在,我們得到這樣的:

Wrapper<ClassA> WrappedA; //ClassA's constructor does not take arguments, so this is ok. 
Wrapper<ClassB> WrappedB; //ClassB's constructor needs arguments, error. 

是否有將允許傳遞的參數變量列表中的構造機制包裝類? (我知道這是一個愚蠢的例子,它只是使點晴)

+1

使包裝構造函數成爲可變參數模板函數並使用['std :: forward'](http://en.cppreference.com/w/cpp/utility/forward)。 –

回答

4

這是完美轉發一個典型的例子:

template <typename... Args> 
Wrapper(Args&&... args) : 
    Wrapee(new T(std::forward<Args>(args)...)) {} 

注:我建議你使用一個智能指針,而不是一個原始的(或者首先代替Wrapper)。