编译时检查方法是否定义为虚拟

Compile time check of whether a method defined as virtual

本文关键字:定义 虚拟 是否 方法 检查 编译      更新时间:2023-10-16

我正试图想出一种方法,在派生类中检查基类的方法是否定义为"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是不可能的
你可以关注,

  • 编码标准
  • 同行评审
  • 可能是一些静态分析工具