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); }

アイデアは、メソッドがメモリを割り当て、指定されたクラスのコンストラクターを呼び出すということです。

問題は、コンストラクターの引数を指定する場合です。私が持っている唯一の解決策は、バリエーションごとに関数をオーバーロードする場所の上にあります。私はそれが非常に実行可能だとは思いません。

より良い解決策はありますか?

4

1 に答える 1

2

救助のための可変個引数テンプレート:

template <typename T, typename ...Args>
T * AllocateObject(Args &&... args)
{
    return ::new (Allocate(sizeof(T)) T(std::forward<Args>(args)...);
}
于 2012-04-11T16:29:57.027 に答える