3

そのため、主にテンプレート化されたオブジェクトの新しいインスタンスを返す関数をテンプレート化し、対応する文字列インデックスが与えられたときに呼び出される関数ポインターをマップに格納する方法として、テンプレート関数ポインターをマップコンテナーに格納することに慣れてきました (それは一口でした)。私の質問は、テンプレート関数ポインターの使用にあります。これが機能しているように見える唯一の理由は、戻り値の型もパラメーターもテンプレート パラメーターの型ではないためです。次のようになります。

template<class T>
base * createT() {return new T;}

ここで、T は base から派生したクラスでなければなりません。これで、正常に機能する関数ポインターを作成できます

base*(*funcptr)() = &createT<derived>;

しかし、次のようなものをセットアップしたいとしましょう:

template <class returnType, class T>
returnType * createT() { return new T;}

この関数の関数ポインタの宣言はどのようになりますか?

4

2 に答える 2

4

関数テンプレートへのポインターを持つことはできず、関数へのポインターのみを持つことができます。したがって、実際にはテンプレートは関係ありません。あなたは次のようなことをします

A *(*funcptr)() = &createT<A,B>;

デモ: http: //ideone.com/NoHYS

于 2012-07-18T14:25:28.493 に答える
1

まったく同じ:

base *(*funcptr)() = &createT<base, derived>;
于 2012-07-18T14:25:57.323 に答える