编译时检查方法是否定义为虚拟
Compile time check of whether a method defined as virtual
我正试图想出一种方法,在派生类中检查基类的方法是否定义为"virtual"。基本上我想有以下代码:
class A {
virtual void vfoo() {}
void foo() {}
virtual ~A() {}
};
class B : public A {
virtual void vfoo() {
MAGIC_CHECK(m_pA->vfoo()); // succeed
// code
m_pA->vfoo();
// code
}
virtual void foo() {
MAGIC_CHECK(m_pA->foo()); // fail compilation because foo is not virtual!
// code
m_pA->foo();
// code
}
A * m_pA;
};
问题是,我如何实现这个MAGIC_CHECK?一种解决方案是使用-Woverloaded虚拟编译标志。有人能提出一个不涉及这面旗帜的解决方案吗?
谢谢!
在C++11中,可以在class
中的函数声明末尾添加override
,如果函数没有覆盖任何内容,则会产生警告:
class B : public A {
virtual void vfoo() override { //OK
}
virtual void foo() override { //error
}
};
在C++03标准中,检查方法是否声明为virtual
是不可能的
你可以关注,
- 编码标准
- 同行评审
- 可能是一些静态分析工具
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- 重载虚拟行为是否定义良好?
- 纯虚拟类和错误未定义对 'vtable 的引用
- 使(虚拟)函数在大多数派生类中无法访问中间基类中可访问,定义良好?
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 基类可以声明虚拟方法但不定义它吗?仍然在派生类中定义
- 无法使用在子类中定义的虚拟getter实现基类
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 没有针对完全专用模板类的外联虚拟方法定义
- 为什么虚拟方法生成对_sbrk的未定义引用?
- 在C++为矢量编写自定义虚拟分配器时遇到问题
- 是否需要定义虚拟析构函数
- 此处未定义虚拟析构函数
- 如何在子类中初始化具有自定义虚拟函数的基成员变量
- 在C++中定义虚拟get和set函数是否被认为是一种好的做法
- 在派生类中重新定义虚拟运算符==
- 在C++中定义虚拟继承的两种不同方式
- 在哪里可以定义虚拟函数
- 为什么不能使用来定义虚拟函数