テンプレート引数として前記関数ポインタを持つテンプレートクラスのオブジェクトを取る関数を指す関数ポインタ。可能?
-
23-08-2019 - |
質問
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はできますか?の
所属していません StackOverflow