条件に応じてクラスの異なる定義を取得するには、依存関係の計算をテンプレート引数に入れます。
// primary template, no default constructor unless Something is true
template< typename T, bool has_default_ctr = Something > class MyClass {
// as you had it, with no default constructor
};
// you want MyClass<T,true> to be just like MyClass<T,false>
// but with a default constructor:
template< typename T > class MyClass<T,true> : public MyClass<T,false> {
MyClass() : MyClass<T,false>(/* chosen constructor args */) { etc; }
using MyClass<T,false>::MyClass<T,false>;
};
C++11 がない場合は、using
コンストラクターの継承を使用できず、すべてのコンストラクターを再宣言し、それらの引数を基本クラスに転送する必要があります。
これは指からキーボードへの操作です。私は便利なコンパイラーを持っていないので、マイナーな構文の誤りが多少ありそうです。