2012-04-11 66 views
1

我有一對夫婦在我的內存管理器類中聲明模板方法:模板函數和安置新的構造函數的參數

template <class T> 
inline T* AllocateObject() { return new (Allocate(sizeof(T))) T(); } 
template <class T, class arg0> 
inline T* AllocateObject(arg0 a0) { return new (Allocate(sizeof(T))) T(a0); } 
template <class T, class arg0, class arg1> 
inline T* AllocateObject(arg0 a0, arg1 a1) { return new (Allocate(sizeof(T))) T(a0,a1); } 
template <class T, class arg0, class arg1, class arg2> 
inline T* AllocateObject(arg0 a0, arg1 a1, arg2 a2) { return new (Allocate(sizeof(T))) T(a0,a1,a2); } 

的想法是,該方法將分配內存和調用任何類構造函數給出。

問題是,如果你想提供構造函數的參數..我唯一的解決方案是上面你重載每個變體的函數。我不覺得它非常可行。

有沒有更好的解決方案?

回答

1

可變參數模板救援:

template <typename T, typename ...Args> 
T * AllocateObject(Args &&... args) 
{ 
    return ::new (Allocate(sizeof(T)) T(std::forward<Args>(args)...); 
} 
+0

在C++ 11,只有是不是?也許我應該補充一點,如果可能的話,我的目標是C++ 03:p – KaiserJohaan 2012-04-11 16:42:07