2013-07-30 11 views
5

Diciamo che avete 2 funzioni liberi:Come eseguire il cast di una funzione libera sovraccaricata per risolvere il conflitto di sovraccarico?

void do_something(dog d); 
void do_something(cat c); 

No dire che si desidera passare queste funzioni a una funzione template:

template <typename DoSomethingFunc> 
void do_something_template(DoSomethingFunc func); 

Quale sarebbe il modo migliore per chiamare do_something_template in modo da evitare conflitti di risoluzione di sovraccarico? Sarebbe un casting?

+0

Cosa fa_qualcosa di diverso? Sospetto che abbia bisogno di una discussione su animali, e dovrebbe selezionare e chiamare la funzione appropriata su questo animale? –

risposta

5

Si potrebbe lanciare o utilizzare una variabile puntatore a funzione locale.

void (*p)(dog) = do_something; 
do_something_template(p); 

do_something_template(static_cast<void(*)(cat)>(do_something)); 
0

Sì, proprio cast:

struct dog {}; 
struct cat {}; 

void do_something(dog d); 
void do_something(cat c); 

template <typename DoSomethingFunc> 
void do_something_template(DoSomethingFunc func); 

void f() { 
    do_something_template((void(*)(dog))do_something); 
    do_something_template(static_cast<void(*)(cat)>(do_something)); 
} 
0

si può lanciare utilizzando C++ getta - in questo caso static_cast è più appropriato.

do_something_template(
    static_cast<void(*)(dog)>(do_something) 
); 
Problemi correlati