类有虚函数吗?c++

Does class have a virtual function? c++

本文关键字:c++ 函数      更新时间:2023-10-16

因此,我有一个类,并想确定它是否具有虚函数。

第一种方法我考虑通过动态强制转换。

 class A
 {
// hidden details..
 };
 class B:public A{};
 int main()
 {
    A *a = new A;;
    B* b = dynamic_cast<B*>(a);
 }

所以在这种情况下,如果a类中有虚函数,编译将成功,否则,将出现以下错误:

错误:cannot dynamic_cast u2018au2019(类型u2018class A*u2019)到类型u2018class B*u2019(源类型非多态)

是否有一种方法来检查这个没有编译错误?注意:我没有c++11或boost支持!

可以通过比较type的大小与添加了虚方法的type的大小来测试是否存在虚方法。这种类型的检查不受标准的保证,并且可能被虚拟继承所欺骗,因此不应该在生产代码中使用它。然而,对于c++ 11 std::is_polymorphic不可用的简单情况,它仍然是有用的。在g++ 4.6下测试:

template<typename T>
class VirtualTest: private T {
    virtual void my_secret_virtual();
};
template<typename T>
bool has_virtual() {
    return sizeof(T) == sizeof(VirtualTest<T>);
}

作为has_virtual<A>()调用测试