c++ - 如何多次继承同一个类?
问题描述
是否可以像这样继承两个相同的类?我能够在 msvc 上编译它,但无法在 g++/clang++ 上编译。我收到错误:
Source.cpp:14:12: warning: direct base 'a' is inaccessible due to ambiguity:
struct b -> struct a
struct b -> class_combiner<struct a> -> struct a [-Winaccessible-base]
struct b : public a, public class_combiner<a> {
^~~~~~~~
Source.cpp:17:12: error: ambiguous conversion from derived class 'b' to base class 'a':
struct b -> struct a
struct b -> class_combiner<struct a> -> struct a
a::f();
资源:
template <typename T>
struct class_combiner : public T {
using T::T;
};
struct a {
void f() {}
};
struct b : public a, public class_combiner<a> {
void f2() {
a::f();
b::class_combiner::f();
}
};
int main() {
b x;
x.f2();
}
解决方案
我想出了可行的快速修复:
template <typename T, unsigned int instance>
struct class_combiner : public T {
using T::T;
};
struct a {
void f() {}
};
struct b : public class_combiner<a, 0>, public class_combiner<a, 1> {
void f2() {
class_combiner<a, 0>::f();
class_combiner<a, 1>::f();
}
};
int main() {
b x;
x.f2();
}
推荐阅读
- c# - ASP MVC 包含非强制的外键类
- c# - 从后台启动时将 Android 应用程序移到后面
- jenkins - Jenkins 管道身份验证步骤
- rust - Rust 中是否有 match 的简写形式?
- javascript - 如何在 jquery 中使用 localStorage?
- javascript - 如何动态生成 adwords 商业广告
- user-interface - 如何在 scilab 的 GUI 中绘制你想要的位置
- wpf - 在 DataGridTemplateColumn.CellTemplate (XAML+WPF+MVVM) 中使用 DatePicker 时的日期字符串格式
- python-3.x - Constant accepted but not defined
- python - 根据特定条件添加到字典并计算文件中的字符串