在看到许多 C++ 元编程示例后,这些示例允许找出类的可能属性(例如知道一个类型是否是模板的特化),或者知道一个类是否包含给定的嵌套类型;但我想知道是否可以编写一个测试或特征来确定最后一个的倒数 - 检查给定Type是否嵌套在 a classorstruct中。
换句话说,我正在寻找以下伪代码的等价物:
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,但在第一种情况下,如果它是可向后移植的,我会更欢迎它。