has_member_of_type - C ++中的模板元编程

时间:2010-10-29 00:44:43

标签: c++ metaprogramming

我怀疑在目前的C ++标准下这是不可能的,但无论如何我都会问。

我想要实现的是让编译器在编译期间弄清楚如果一个类包含Base类型的任何成员变量(及其派生)。

e.g。

struct Base
{
};

struct Derived : public Base
{
};

struct Foo
{
    int x;
    Derived a;
    Derived b;
};

struct Bar
{
    int x;
};

我想要的东西,

has_member_of_type<Base, Foo>::value

在这种情况下是真的(一个或多个成员变量的基本类型为Base),而其他任何东西(包括基本类型)都将减去false。

e.g。

has_member_of_type<Base, char>::value = false
has_member_of_type<Base, Bar>::value = false

请注意,如果用户类具有某种类型的成员变量,我正在尝试在我的库中使用has_member_of_type来检测和使用不同的代码分支。

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。你甚至无法访问成员(除非告诉他们的名字),更不用说探究他们的类型了。