要根据某些条件获得类的不同定义,请将依赖关系计算放在模板参数中。
// 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
构造函数继承,您必须重新声明其所有构造函数并将它们的参数转发给基类。
这是手指对键盘的操作,我没有方便的编译器 atm,因此可能会出现轻微的语法错误。