2009-07-04 22 views
0

x__x前記関数ポインタをテンプレート引数としてテンプレートクラスのオブジェクトを取る関数を指す関数ポインタ。可能?

私はこのような何かやりたい:

typedef long (* fp)(BaseWindow<fp> & wnd, HWND hwnd, long wparam, long lparam); 

をしかし、私はコンパイルエラーを取得:

error C2065: 'fp' : undeclared identifier

は何とかこれを実装することが可能ですか?

+0

Typo? fp_tとは何ですか? – eduffy

+0

コンパイラがエラーを報告する行を貼り付けてください。 – Sahas

+0

woops。ポインタはfp_tという名前でしたが、投稿のプレビューには表示されませんでしたので、私はそれをfpに変更しましたが、エラーメッセージを修正するのを忘れました。 – Rao

答えて

9

テンプレートパラメータのタイプにはそれ自体が含まれるため、そうではありません。これは、タイプの無限の再帰をもたらすだろう。代わりに、クラステンプレートの特殊化の場合

、あなたは

struct TemplateBase { 

}; 

typedef long (*fpType)(TemplateBase&, HWND, long, long); 

template<fpType FP> 
struct BaseWindow : TemplateBase { 

}; 


long sampleFunc(TemplateBase &b, HWND hwnd, long wparam, long lparam) { 
    ... 
} 

int main() { 
    BaseWindow<sampleFunc> bw; 
    sampleFunc(bw, ...); 
} 

あなたがこれを行うにはどうしたいですかそれは非常に可能性があります、それのベース・クラスを受け入れますか?

+0

私が直面している問題は野生的なアイデアでした。しかし、おそらくもっと良い方法があります。この問題をここでのコメントとして説明するには時間がかかりすぎるだろう。だから、おそらく私はそれをしばらくして正式な質問をするだろう。 ありがとうございました。 – Rao

+0

仮想関数を基本クラスに追加することができ、sampleFunc内から仮想関数を追加すると、テンプレート以外のクラスの仮想関数のように派生クラスを制御できます。 –

関連する問題