従来のコードの一部で、私が作業を依頼された部分で、わかりません。 SOでの検索やグーグルではあまり役に立ちませんでした。C++でテンプレートクラスを派生させる
次のようになりますテンプレートクラスがあります:
template<int Index_t, int Kind_t, ProtocolType Prot_t, class Protocol>
class CommandHandlerGeneric
: private CommandHandlerGeneric<Index_t-1, Kind_t, Prot_t, Protocol> {
public:
CommandHandlerGeneric(Protocol& Shared, CmdHandlerBase** Cont) :
CommandHandlerGeneric<Index_t-1, Kind_t, Prot_t, Protocol>(Shared, Cont) {}
};
CmdHandlerBase
クラスが別の場所で別のヘッダー内に存在する非テンプレートクラスです。上記の定義に続いて、このようになりますマクロがあります:
#define REGISTER_COMMAND_HANDLER_BASE(CmdIndex, CmdType, CmdKind, ProtType) \
template<class Protocol> \
class CommandHandlerGeneric<CmdIndex, CmdKind, ProtType, Protocol>
: private CommandHandlerGeneric<CmdIndex-1, CmdKind, ProtType, Protocol> \
{ \
CmdType m_Cmd;\
public: \
CommandHandlerGeneric(Protocol& Shared, CmdHandlerBase** Cont) : \
m_Cmd(Shared), \
CommandHandlerGeneric<CmdIndex-1, CmdKind, ProtType, Protocol>(Shared, Cont) \
{ Cont[CmdIndex] = &m_Cmd; } \
};
は、上記のマクロは、部分的にクラステンプレートCommandHandlerGeneric
を専門とするように見えます。これは正しいです?自分自身からクラスを個人的に派生させる根本的な理由は何ですか?
* Index_t = 0 *、または他の値の特殊化があるはずです –
右に変更しました。 –
多くのありがとうございます! – Somesh