2013-07-30 10 views
5

Powiedzmy, że masz 2 darmowe funkcje:Jak odlać przeciążoną darmową funkcję, aby rozwiązać konflikt przeciążenia?

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

Nie że chcesz przekazać te funkcje do matrycy Funkcja:

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

Jaki byłby preferowany sposób, aby zadzwonić do_something_template w sposób, który pozwala uniknąć konflikty związane z przeciążeniem? Czy to będzie casting?

+0

Co robi plik_something_template? Podejrzewam, że potrzebuje argumentu zwierzęcia i powinien wybrać i wywołać odpowiednią funkcję na tym zwierzęciu? –

Odpowiedz

5

Można rzucać lub użyć zmiennej wskaźnik funkcji lokalnej.

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

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

Tak, po prostu rzucić go:

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

Można rzucić go za pomocą C++ rzuca - w tym przypadku static_cast jest najbardziej odpowiednia.

do_something_template(
    static_cast<void(*)(dog)>(do_something) 
); 
Powiązane problemy