私はC++で何か厄介なことを見つけましたが、オーバーヘッドなしでこれを回避するためのトリックがあるかどうかわかりません。問題は次のとおりです。
テンプレート関数の場合、次のようになります。
// Function declaration/definition
template<bool Option = false> void myFunction()
{
std::cout<<"Option = "<<Option<<std::endl;
}
// Then I can use :
myFunction<false>();
myFunction<true>();
myFunction(); // <- NO PROBLEM HERE
テンプレートクラスの場合:
// Class definition/declaration
template<bool Option = false> class MyClass
{
};
// Then I can use :
myClass<false> x;
myClass<true> y;
myClass z; // <- PROBLEM HERE : only "MyClass<> z;" will compile !
この動作の理由はなぜですか?それを避けるためのトリックはありますか?オプションのパラメータがテンプレートとして渡されたクラスの場合、これはエンドユーザーにとって不便であることがわかります。エンドユーザーはデフォルトの実装をテンプレートなしのクラスとして使用できるはずです...