0

x__x

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

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

しかし、コンパイルエラーが発生します:

エラーC2065:'fp':宣言されていない識別子

どういうわけかこれを実装することは可能ですか?

4

2 に答える 2

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

これで何をしたいですか?

于 2009-07-04T16:53:13.597 に答える
0

このページの関連リンクセクションから:独自の型の関数を引数として取る関数ポインタをtypedefするにはどうすればよいですか?

于 2009-07-04T17:00:45.447 に答える