C++ 如何断言特定类在其布局中没有任何vtbl指针?

C++ 如何断言特定类在其布局中没有任何vtbl指针?,c++,C++,我有一个简单的RAII类来确保一些句柄被正确处理。现在我想断言,没有人会意外地向它添加任何虚拟方法。在我看来,我需要断言该类没有vtbl指针 我怎么做?可以在编译时断言吗 编辑 我会满足于桌面编译器。据我所知,没有桌面C++编译器不使用VTBL来实现多态性。 < P>如果你有C++ 11库,你可以使用: 如果T是多态类(即,声明或继承至少一个虚拟函数的类),则提供等于true的成员常量值。对于任何其他类型,值为false 从理论上讲,您不能以可移植的方式来实现这一点。您可能对获得一个密封的类感兴

我有一个简单的RAII类来确保一些句柄被正确处理。现在我想断言,没有人会意外地向它添加任何虚拟方法。在我看来,我需要断言该类没有vtbl指针

我怎么做?可以在编译时断言吗

编辑


我会满足于桌面编译器。据我所知,没有桌面C++编译器不使用VTBL来实现多态性。

< P>如果你有C++ 11库,你可以使用:

如果T是多态类(即,声明或继承至少一个虚拟函数的类),则提供等于true的成员常量值。对于任何其他类型,值为false


从理论上讲,您不能以可移植的方式来实现这一点。您可能对获得一个密封的类感兴趣:vtbl是一个实现细节。可能存在不使用调用表来实现虚拟函数的编译器。您想将自己限制在一个特定的编译器中吗?我不知道添加虚拟对象的危险是什么?当然,如果你的句柄是私有的,那么它是安全的,不是吗?添加虚拟会改变类的布局,在某些编译器中,vtbl将是类的第一个成员,而我需要句柄作为第一个成员,因为各种原因。+1,很好!如果你没有C++ 11,你有VisualC++,那就是<代码>我希望他们在C++11中引入更多的静态类型信息/反射特性(比如获取类的字段/方法列表的方法)。这将使为脚本语言创建一些像包装器这样的元代码变得非常容易。Boost.TypeTraits也有这个,顺便说一句,+1:有一个徽章。值得注意的是,我们可以完全忽略“vtables”的实现概念,只关注具有虚拟函数的多态类。我想这种情况下不可能有编译时断言,对吗?