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

StackOverflow https://stackoverflow.com/questions/1082552

質問

x__x

私はこのような何かをしたい:

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

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

  

エラーC2065: 'FP':宣言されていません   識別子

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

役に立ちましたか?

解決

テンプレートパラメータのタイプは、それ自体が含まれますので、

はありませんそれは、ありません。これは、タイプで無限再帰にもたらすであろう。

代わりに、クラステンプレートの特殊化のため、あなたはそれの基本クラスを受け入れる場合は

は、それは非常に可能です。

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

あなたはこれをどうしたいのか?

他のヒント

この非常にページの関連リンクのセクションから:<のhref = "https://stackoverflow.com/questions/816356/how-can-i-typedef-a-function-pointer-that-takes-a-機能の-ITS-独自の型-として-">私は、引数として、独自の種類の関数を取る関数ポインタをtypedefはできますか?の

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top