C++ traits 技术初探

最近开始接触C++的Traits技术,阅读了网上多篇博文,了解了traits技术的实现方法,但对于这种高深玄奥的技术在实际问题中的使用还是一头雾水,本文仅摘录一个实际使用的例子,帮助理解。

以下代码摘录自ACE。

template <class T>
struct ACE_Peer_Acceptor_Traits;

template <>
struct ACE_Peer_Acceptor_Traits <ACE_SOCK_Stream>
{
	typedef ACE_SOCK_Acceptor peer_acceptor_type;
};

template <>
struct ACE_Peer_Acceptor_Traits <ACE_SSL_SOCK_Stream>
{
	typedef ACE_SSL_SOCK_Acceptor peer_acceptor_type;
};

这段代码应用于需要提供tcp和ssl两种连接方案的场景,希望使用同一套代码来统一定义兼容两种方案。

以下是ACE_Acceptor的定义:

template <typename SVC_HANDLER, typename PEER_ACCEPTOR>
class ACE_Acceptor : public ACE_Service_Object
{
    // 此处略去实际定义的代码
};


实际应用时:

template <class PEER_STREAM, typename HANDLER>
class Service
{
private:
    typedef typename ACE_Peer_Acceptor_Traits<PEER_STREAM>::peer_acceptor_type peer_acceptor_type;
    typedef ACE_Acceptor<HANDLER, peer_acceptor_type> acceptor_type;
    acceptor_type acceptor_;
};

基于以上定义,就可以使用Service类定义分别基于tcp和ssl服务对象。


转载于:https://my.oschina.net/u/2460037/blog/509009

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值