模板化函数和放置新的构造函数参数

时间:2012-04-11 16:26:46

标签: c++ templates memory-management placement-new

我在Memory Manager类中声明了几个模板化方法:

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 个答案:

答案 0 :(得分:1)

拯救的可变参数模板:

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