我正在尝试想出一种方法来检查派生类中是否将基类的方法定义为“虚拟”。基本上我想要以下代码:
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-virtual 编译标志。 谁能提出一个不涉及此标志的解决方案?
谢谢!
最佳答案
在 C++11 中,可以在 class
中的函数声明末尾添加 override
,如果函数没有覆盖,它将产生警告任何东西:
class B : public A {
virtual void vfoo() override { //OK
}
virtual void foo() override { //error
}
};
关于c++ - 编译时检查方法是否定义为虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9890162/