在看到许多关于C++元编程的例子后,可以确定类的许多属性(例如知道类型是否是模板的特化),或者知道一个类是否包含给定的嵌套类型; 但我想知道是否可能编写一个测试或特性,以确定最后一个的反向-检查给定的
Type
是否嵌套在class
或struct
中。
换句话说,我正在寻找以下伪代码的等效物:
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
这样的表达式。
template struct is_nested { typedef char yes; typedef struct { char u[2]; } no;
// Herein lies the problem ???? static yes test( char [ sizeof(Anytype::Type) ] ) ; ???? static no test(...);
public: enum { value = sizeof(test(0)) == sizeof(char) }; };
(请注意,我不关心也不知道 什么 类型会嵌套在 Type
中;所有这些都只与 Type
有关。换句话说,此特性应该仅依赖于 Type
。)
我正在寻找一个 C++ 解决方案,无论是在 C++11 还是 C++03 中,但在第一种情况下,如果可以回溯使用,则更加欢迎。
enum
的关系运算符来解决这个问题是我正在研究的两种方法之一。 - Luis Machuca