2013-07-30 24 views
5

Giả sử bạn có 2 chức năng miễn phí:Làm thế nào để cast chức năng miễn phí quá tải để giải quyết xung đột quá tải?

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

Không nói bạn muốn vượt qua các chức năng này để một chức năng templated:

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

Điều gì sẽ là cách ưa thích để gọi do_something_template theo cách mà tránh xung đột độ phân giải quá tải? Nó sẽ được đúc?

+0

Do_something_template làm gì? Tôi nghi ngờ rằng nó cần một đối số động vật, và nó nên chọn và gọi hàm thích hợp trên con vật này? –

Trả lời

5

Bạn có thể đúc hoặc sử dụng một biến con trỏ chức năng địa phương.

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

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

Vâng, chỉ cast nó:

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

Bạn có thể cast nó sử dụng C++ phôi - trong trường hợp này static_cast là thích hợp nhất.

do_something_template(
    static_cast<void(*)(dog)>(do_something) 
); 
Các vấn đề liên quan