让编译器告诉什么确切的纯虚拟方法使结构抽象?

Make compiler to tell what exact pure virtual methods make struct abstract?

本文关键字:方法 虚拟 结构 抽象 编译器 什么      更新时间:2023-10-16
struct Base{
virtual foo()=0;
virtual bar()=0;
};
struct Derived:Base{
virtual foo(){}
//bar() is still pure virtual
};
static_assert(is_constructible_v<Derived>,"You forgot to override few methods: i do not know what are they.")

"我不知道他们是什么。">

如何将此短语替换为要覆盖的方法的确切列表?

也许您只需要要求编译器尝试编译时实例化。例如:

static_assert(sizeof(Derived[1]),"...");

让编译器告诉什么确切的纯虚拟方法使结构抽象?

这是非常特定于编译器和工具的。

如果你的C++编译器是最近的GCC,请阅读其文档(特别是如何调用它(。叮叮当也是如此。

如何将此短语替换为要覆盖的方法的确切列表?

在标准 C++ 11 中可能是不可能的(我不确定:通过阅读 n3337 进行检查(。但是您可以自定义编译器(例如编写GCC插件(来警告您这种情况。

还可以尝试使用Clang静态分析器或Frama-C(及其FramaC ++变体(等工具,或根据需要自定义它们。

考虑生成C++代码以满足您的需求(例如,使用 GPP 或您自己的C++元程序,由您正在使用的构建自动化工具驱动(,就像 SWIG 或 ANTLR 所做的那样。Qt moc工具可能是鼓舞人心的,也许可能对你有用或适应你的需求。