C++模板元编程与表达式模板技术解析
1. 模板元编程的递归实例化与递归模板参数
在C++中,模板元编程是一种强大的技术,但也存在一些限制。C++标准建议编译器至少允许17层的递归实例化,但在实际的模板元编程中,这样的限制很容易被突破。当递归实例化涉及递归模板参数时,问题会更加严重。
考虑以下递归模板的示例:
template<typename T, typename U>
struct Doublify {};
template<int N>
struct Trouble {
typedef Doublify<typename Trouble<N - 1>::LongType,
typename Trouble<N - 1>::LongType> LongType;
};
template<>
struct Trouble<0> {
typedef double LongType;
};
Trouble<10>::LongType ouch;
使用 Trouble<10>::LongType 不仅会触发 Trouble<9> 、 Trouble<8> 直到 Trouble<0> 的递归实例化,还会对 Doublify 进行复杂类型的
超级会员免费看
订阅专栏 解锁全文
1019

被折叠的 条评论
为什么被折叠?



