関数ポインター テンプレート パラメーターとして、既定の引数を持つ関数を使用しようとしています。
template <void (*F)()>
class A {};
void foo1(int a = 0) {}
void foo2() {}
int main()
{
//A<foo1> a1; <-- doesn't work
A<foo2> a2;
}
コンパイラ エラーは次のとおりです。
main.cpp:7:7: エラー: テンプレート引数 'foo1' を 'void (*)()' に変換できませんでした</p>
これが機能するための特定の構文はありますか? それとも特定の言語制限ですか? それ以外の場合は、デフォルト パラメータの代わりに 2 つの個別の関数を使用することもできます。
void foo1(int a) {}
void foo1() { foo1(0); }
更新 署名が異なることは理解していますが、デフォルトのパラメーターですべての関数を変更する必要なく、これを便利に機能させる方法があるかどうか疑問に思っていますか?