私はテンプレート関数へのポインタを作成したい:スコープ内のテンプレート関数へのポインタを作成できますか?
template <class T>
void foo(T x){}
int main()
{
template <class T>
void (*ptr)(T);
return 0;
}
私は上記のエラーを得た:私はグローバルスコープでテンプレート関数へのポインタを宣言することによってそれを修正することができ、それが正常に動作しますerror C2951: template declarations are only permitted at global or namespace scope
:
template <class T>
void foo(T x){ cout << "foo()" << endl;}
template <class T>
void (*ptr)(T);
int main()
{
ptr = foo;
(*ptr)(7);
return 0;
}
- は、最初のコードのように範囲内のテンプレート関数へのポインタを宣言する方法はありますか?
2番目のコードスニペットで修正*していません。 – WhiZTiM
テンプレート関数は、ある種の型でインスタンス化されるまで存在しないので、関数テンプレートへのポインタは不可能です。しかし、 'foo' –
AndyG
'テンプレート void(* ptr)(T);'のような特定のインスタンスへのポインタは、C++ 14以降の変数テンプレートになります。使用法は 'ptr = foo;'のようなものになります。 –
Jarod42