In una porzione di codice legacy con cui mi è stato chiesto di lavorare, ho trovato un concetto che non capisco. Cercare in SO e googling non è stato di grande aiuto, quindi questa domanda.Ricavare una classe template da sé in C++
C'è una classe template che assomiglia a questo:
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) {}
};
La classe CmdHandlerBase
è una classe non-template che esiste altrove in un colpo di testa diversa. A seguito della definizione di cui sopra, v'è una macro che assomiglia a questo:
#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; } \
};
assomiglia al di sopra macro si specializza in parte il modello di classe CommandHandlerGeneric
. È corretto? Qual è la logica alla base di una classe privata derivata da se stessa?
* Ci dovrebbe essere una specializzazione in giro per Index_t = 0 *, o qualche altro valore –
Destra, modificato. –
Molte grazie ragazzi! – Somesh