C++的模板(五):压缩格式

声明一个C++的模板语法是,template 〈class c…〉 …
如果要向模板传递的参数类型比较多,这个template表就会很长,用起来很不方便。这时候可以用上template参数的压缩格式。

压缩格式的用法很简单。就是在外部定义一个struct, 把传给模板的参数,定义到struct 里面,这样就只要传一个struct 好了。

比如原来的template是这样的:
template<class Node_type, class Value_type> …
可以把传给template两个参数类型收集到一个struct里面去。然后再把这个struct传给template:
struct my_value {…};
struct my_node {…};
struct my_schema {
typedef my_node Node_type;
typedef my_value Value_type;
};

template 〈class Schema〉 class X
{
typedef Schema::Node_type Node_type;
typedef Schema::Value_type Value_type;

};

使用的时候,用template <my_schema>…,这个用template <my_node, my_value>…有相同的效果。

作为例子,下面抄录了一段STL中的代码:

template<typename _Iterator, typename _Sequence>
    class _Safe_iterator : public _Safe_iterator_base
    {
      typedef _Safe_iterator _Self;

      /*. ... ......... .. ..... .. ... ......... ... ........ .......
       .  ... ..........
       */
      enum _Distance_precision
	{
	  __dp_equality, //. ... ....... ........ ......... ....
	  __dp_sign,     //. ... ......... ........ ... ........
	  __dp_exact     //. ... ......... ........ .........
	};

      //. ... .......... ........
      _Iterator _M_current;

      //. ......... .. .... .. . ........ .........
      bool
      _M_constant() const
      {
	typedef typename _Sequence::const_iterator const_iterator;
	return __is_same<const_iterator, _Safe_iterator>::value;
      }

      typedef std::iterator_traits<_Iterator> _Traits;

    public:
      typedef _Iterator                           _Base_iterator;
      typedef typename _Traits::iterator_category iterator_category;
      typedef typename _Traits::value_type        value_type;
      typedef typename _Traits::difference_type   difference_type;
      typedef typename _Traits::reference         reference;
      typedef typename _Traits::pointer           pointer;

      //. ..... ... ........ .. ........ ... ..........
      _Safe_iterator() : _M_current() { }
...
};

里面一上来用了很多typedef。相当于把很多本来要通过template 参数表传递的参数先收集到_Traits,然后再传入一个_Traits。这样就简化了template参数传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值