【发布时间】:2013-11-11 14:41:01
【问题描述】:
我可以编写一个递归的Contains 元函数,通过继承或嵌套的typedef 调用自身。以下标准有何不同(如果有)?
A:编译时需要的编译时间和内存。
B:最大递归限制(一个允许我使用比另一个更多的参数吗?)
C:惰性实例化(允许我省略更多实例化吗?这在当前示例中可能没有什么不同。但是,如果一个类嵌套了 std::conditional 的 typedef 而不是从它派生的?)
1:
template<typename T, typename... Ts>
struct Contains : std::false_type {}; //only possible if Ts is empty so does not contain
template<typename T, typename U, typename... Ts>
struct Contains<T, U, Ts...> : Contains<T, Ts...>{};
template<typename T, typename... Ts>
struct Contains<T, T, Ts...> : std::true_type{};
2:
template<typename T, typename... Ts>
struct Contains {
typedef std::false_type Type;
}; //only possible if Ts is empty so does not contain
template<typename T, typename U, typename... Ts>
struct Contains<T, U, Ts...> {
typedef typename Contains<T, Ts...>::Type Type;
};
template<typename T, typename... Ts>
struct Contains<T, T, Ts...>{
typedef std::true_type Type;
};
【问题讨论】:
标签: c++ templates c++11 recursion metaprogramming