我怀疑在目前的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来检测和使用不同的代码分支。
答案 0 :(得分:2)
不,这是不可能的。你甚至无法访问成员(除非告诉他们的名字),更不用说探究他们的类型了。