【发布时间】:2010-10-20 18:01:03
【问题描述】:
我需要定义一个模板结构:
element<T>::type
属于:
T::element_type
如果 T 包含一个名为 element_type 的(公共)typedef,否则(如果它不包含这样的 typedef)
element<T>::type
属于类型
T::value_type
如果 T 是可变的并且属于类型
const T::value_type
如果 T 是常数。
我真的很挣扎,任何建议都非常感谢! :)
非常感谢您提前提供的帮助!
【问题讨论】:
-
对于第一部分,您可以阅读有关 SFINAE(google it)的信息,并且您一定会找到说明您所需要的示例
-
关于 SFINAE 的 wikipedia 文章实际上包含了一个关于检查 typedef 的示例,由您本人编写。 :P
-
无法检测到 typedef(如果存在)是公共的。该标准明确禁止 SFINAE 使用访问限定符违规。
-
我已经在维基百科上看到了这个例子,但是一旦我能够获得一个静态 const bool 来检测 typedef(true 或假)....这可能是微不足道的,但我不知道,对不起!这简单吗? :P
-
更新:我现在很清楚我可以使用静态常量作为模板参数,我忘记了这一点。再次感谢。
标签: c++ templates metaprogramming