Costruisci la gerarchia di classe con funzioni di gestore sovraccarichi
Domanda
Attualmente sto cercando di costruire automaticamente una gerarchia di classe usando modelli C ++. Il risultato finale è una classe di gestori di messaggi che fornisce funzioni di gestore per tutti i possibili messaggi, indicati in una tipografia.
Tuttavia, quando eredita da quella gerarchia di classe e si tenta di implementare la funzione gestore per eseguire effettivamente il codice dell'applicazione solo per alcuni tipi, C ++ non chiama la funzione dalla classe base.
Quello che segue è un esempio minimo e completo di ciò che sto cercando di ottenere. Non si compila perché C ++ si lamenta di non trovare un sovraccarico per handle( const B& )
.
#include <iostream>
#include <typeinfo>
// Typelist.
struct None {};
template <class H, class T = None>
struct Typelist {
typedef H Head;
typedef T Tail;
};
template <class TL>
struct Handler : public Handler<typename TL::Tail> {
using Handler<typename TL::Tail>::handle;
virtual void handle( const typename TL::Head& obj ) {
std::cout << "Not handled! " << typeid( typename TL::Head ).name() << std::endl;
}
};
template <>
struct Handler<None> {
virtual void handle() {}
};
struct A {};
struct B {};
typedef Typelist<A, Typelist<B> > MsgList;
struct MyHandler : Handler<MsgList> {
void handle( const A& a ) {
std::cout << "A!" << std::endl;
}
};
int main() {
MyHandler handler;
A a;
B b;
handler.handle( a );
handler.handle( b );
}
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow