【发布时间】:2011-01-16 17:59:16
【问题描述】:
我想知道是否有办法找出一个类是否是另一个类的直接基础,即在 Boost 类型特征术语中是 is_direct_base_of 函数。据我所知,Boost 似乎不支持这种功能,这让我认为当前的 C++ 标准是不可能的。
我想要它的原因是对用于反射系统的两个宏进行一些验证检查,以指定一个类派生自另一个类,如下面的示例代码所示。
header.h:
#define BASE A
#define DERIVED B
class A {};
class B : public A
{
#include <rtti.h>
};
rtti.h:
// I want to check that the two macro's are correct with a compile time assert
Rtti<BASE, DERIVED> m_rtti;
虽然在这个简单的例子中宏似乎没有必要,但在我的真实世界场景中rtti.h 要复杂得多。
一种可能的方法是将 this 指针的大小与转换为基类型的 this 指针的大小进行比较,并以某种方式试图弄清楚它是否是基类本身的大小或其他东西。 (是的,你是对的,我也不知道那会怎样!)
【问题讨论】:
标签: c++ templates boost metaprogramming