【发布时间】:2013-05-01 18:42:41
【问题描述】:
在看到许多 C++ 元编程示例后,这些示例允许找出类的可能属性(例如 knowing if a type is a specialization of a template ),或者知道一个类是否包含给定的嵌套类型;但我想知道是否可以编写一个测试或特征来确定最后一个的倒数 - 检查给定的 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 这样的表达式。
(请注意,我不关心也不(负担得起)知道 what 类型将 Type 嵌套在其中;重要的是它是否嵌套在 something em> 与否。换句话说,这个特征应该只依赖于Type。)
我正在寻找 C++ 解决方案,无论是 C++11 还是 C++03,但在第一种情况下,如果它是可向后移植的,我会更欢迎它。
【问题讨论】:
-
这是要解决什么问题?
-
我主要是在理论上讨论如何通过禁用嵌套在结构中的
enums 的关系运算符来改进我的adaption of typesafe enums in C++03;这是我正在研究解决该问题的两种方法之一。
标签: c++ templates nested traits