最近开始接触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服务对象。