私は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 !
は、なぜ、この行動の理由は? これを回避する方法はありますか? テンプレートとして渡されたoptionnalパラメータを持つクラスの場合、私はエンドユーザーのために、これは便利ではない見つける:彼はノーテンプレートクラスとしてデフォルトの実装を使用することができるはず...
"*これを避けるための方法はありますか?*"それ以外の新しいタイプの名前を作成することを検討し、すべてのコンストラクタを転送することを検討している場合を除きます。 – ildjarn
また、継承の代わりにtypedefを使用するだけです。 'typedef myClass myClassDef; –
@Remy:ああ、そうです。私の脳はその日に終わったと思う。 – ildjarn