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

标签 c++ compiler-construction

我正在尝试想出一种方法来检查派生类中是否将基类的方法定义为“虚拟”。基本上我想要以下代码:

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/

相关文章:

c++ - 这些对象初始化之间有什么区别?

c# - 以 window 8/10 技术无延迟地完全实时截屏

java - 如何将三地址码(TAC)转换为Java字节码?

c++ - 为什么当使用 _ITERATOR_DEBUG_LEVEL=0 销毁 vector 时,Visual C++ 2010 仍调用 Orphan_all?

c++ - std::string 和 std::wstring 的 wdk ddk 编译器问题

java - 为什么javac的源码是用java写的?

c++ - 使用 OpenCV 进行模板匹配的图像类型问题

c++ - 返回值优化不适用于 const unique_ptr 成员?

c++ - 将 Visual C++ 与不同的 C++ 编译器一起使用?

c++ - 检查数组元素中的所有数字是否为0或1 [c++]