C++traits技術の初探査

1149 ワード

最近C++のTraits技術に触れ始め、ネット上の多くのブログを読み、traits技術の実現方法を理解したが、このような高深玄奥な技術の実際の問題での使用はまだ霧水であり、本文は実際の使用例を1つだけ抜粋し、理解を助けた.
次のコードは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の2つの接続スキームを提供する必要があるシーンに適用され、同じコードセットを使用して互換性のある2つのスキームを統一的に定義したい.
以下、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_;
};

以上の定義に基づいて、サービスクラス定義を使用して、tcpおよびsslサービスオブジェクトにそれぞれ基づいて定義することができます.