C++模板元编程的一点体会
作者:网络转载 发布时间:[ 2014/10/8 10:57:52 ] 推荐标签:C++ NET 编程
答案如下,其它的操作本质上差不多,有兴趣的读者可自行挑战一下,不在这里?嗦:
template<class TL, class T> struct IndexOf;
// 当搜索空的 typelist 时,结果为 -1.
template<>
struct IndexOf<NullType, T>
{
enum { value = -1 };
};
// 当前节点的类型为所想要搜索的类型时
template<class T, class Tail>
struct IndexOf<Typelist<T, Tail>, T>
{
enum { value = 0 };
};
// 当前节点不是所查找的类型时,递归地在 Tail 中进行查找。
template<class Head, class Tail, class T>
struct IndexOf<Typelist<Head, Tail>, T>
{
enum { in_tail = IndexOf<Tail, T>::value };
// 使用三元操作符进行判断,T 是否在 Tail 中存在。
enum { value = (in_tail >= 0)? 1 + in_tail: -1 };
};
从上面的例子我们可以看到,因为 c++ 支持对模板递归式的解析(也是一个模板依赖于另一个模板时,先解释被依赖的模板),使得模板事实上有了很强的编译时运行的能力,这种能力表面上看起来可能不容易操控,但却显然是潜力无限的,不过它的缺点也比较明显:
编译时代码与运行时代码搅在一起,在处理复杂问题时,程序的逻辑可能不容易读懂。
编译时调试现阶段的支持还不够好。
网络上关于 c++ 模板元编程的讨论有很多,模板的各种能力技巧也渐渐被越来越多的人所发现所挖掘,但是在实际的工作中,对很多人来说模板元编程却仍一直处于比较保守的状态,到底过分依赖模板元编程缺点还是太明显,我的见闻来说,完全基于模板元编程做出来的比较出名的工具型的东西,主要有两个:boost spirit 与 boost proto. 它们的使用体验,老实说都不是很好。。。特别是 spirit。而至于它们的实现,对有兴趣练习深入这方面技能的程序猿来说,这两者倒确实是不可多得好素材,尤其是 proto, 代表了一个高峰。
好消息是,伴随着 c++11 的到来,好些众人期盼以久的新特性终于从理想照进现实,尤其是 variadic parameter 的加入,可以预见将再度大大提升模板的能力,c++ 标准沉寂近10年后迎来了一个新时期,甚至还有人曾经提议要加入 static_if,concept 等概念也在酝酿中了,变化是永恒不变的东西,你,作好准备了吗?
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com