有条件地选择要继承的类

Conditionally to choose which classes to inherit

本文关键字:继承 选择 有条件      更新时间:2024-05-09

所以,我有一个菱形层次结构。

class Base {
// ...
}

class Derived_A : public Base {
// ...
}

class Derived_B : public Base {
// ...
}

class Join : public Derived_A, public Derived_B {
// ...
}

根据模板变量,我想有条件地选择继承a和/或B

template<bool HAS_A, bool HAS_B>
class Join : public Derived_A, // enable if HAS_A
public Derived_B  // enable if HAS_B
{
// ...
}

我尝试使用std::enable_if_t,但我不确定当它的布尔值为false时是否有效。

指定基类而不是使用bool作为模板参数似乎更简单。例如

template<class... Base> class Join : public Base... {}; 

然后像使用Join<Derived_A, Derived_B>Join<Derived_A>Join<Derived_B>Join<>一样使用它(不继承任何内容(。