2012-04-11 64 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