c++ - 有条件地选择要继承的类
问题描述
所以,我有一个钻石层次结构。
class Base {
// ...
}
class Derived_A : public Base {
// ...
}
class Derived_B : public Base {
// ...
}
class Join : public Derived_A, public Derived_B {
// ...
}
根据模板变量,我想有条件地选择继承 A 和/或 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>
, and Join<>
(inherit nothing) 一样使用它。
推荐阅读
- angular - 为什么 PrimeNg pSortableColumn 没有容器项目的点击事件?
- arrays - 在 Google 表格中使用数组公式滚动总和
- regex - 将所有特殊字符和单词分隔到字符串列表中的项目中 - 正则表达式
- html - CSS中的不透明度不影响div
- c++ - 反转一个数字并从头开始删除零
- ruby-on-rails - 如何在ruby erb html表中编写if语句
- javascript - 如何在CKEditor 5中上传图像时添加标题
- django - 用于验证 1 个字段与 Django 中的另一个字段的数据库级别约束
- git - 如何在 VS Code 中部分还原同事的 Git 提交?
- java - 单元测试用例失败:与此模拟的零交互