x__x
私はこのようなことをしたい:
typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam);
しかし、コンパイルエラーが発生します:
エラーC2065:'fp':宣言されていない識別子
どういうわけかこれを実装することは可能ですか?
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, ...);
}
これで何をしたいですか?
このページの関連リンクセクションから:独自の型の関数を引数として取る関数ポインタをtypedefするにはどうすればよいですか?