在看到许多 C++ 元编程示例后,这些示例允许找出类的可能属性(例如知道一个类型是否是模板的特化),或者知道一个类是否包含给定的嵌套类型;但我想知道是否可以编写一个测试或特征来确定最后一个的倒数 - 检查给定Type
是否嵌套在 a class
orstruct
中。
换句话说,我正在寻找以下伪代码的等价物:
template <typename Type> struct is_nested {
enum { value = {__some magic__} };
};
typedef int type1;
struct Something { typedef int internal_type; };
typedef Something::internal_type type2;
//...later, likely at a different scope
is_nested< int >::value; // yields false
is_nested< std::vector<int>::iterator >::value; // yields true
is_nested< type1 >::value; // yields false
is_nested< type2 >::value; // yields true
我知道我可以sizeof
用来实现是/否测试,我认为Type
是这些测试的一部分,但我不知道如何将某种“任何可行的类型”插入到测试中,以便我可以形成一个表达式喜欢Anytype::Type
。
模板 结构 is_nested { typedef char 是; typedef struct { char u[2]; } 不; // 问题就出在这里 ???静态是测试(字符[sizeof(Anytype::Type)]); ???静态无测试(...); 上市: 枚举 { 值 = sizeof(test(0)) == sizeof(char) }; };
(请注意,我不关心也不(负担得起)知道将嵌套什么类型Type
;重要的是它是否嵌套在某些东西中。换句话说,这个特征应该只依赖于Type
。)
我正在寻找 C++ 解决方案,无论是 C++11 还是 C++03,但在第一种情况下,如果它是可向后移植的,我会更欢迎它。