如何转换重载的自由函数来解决过载冲突?

时间:2013-07-30 08:46:09

标签: c++

假设您有2个免费功能:

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

不,你想将这些函数传递给模板化函数:

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

以避免重载解决冲突的方式调用do_something_template的首选方法是什么?它会铸造吗?

3 个答案:

答案 0 :(得分:5)

您可以强制转换或使用本地函数指针变量。

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

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

答案 1 :(得分:0)

是的,只是施展它:

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));
}

答案 2 :(得分:0)

您可以使用C ++强制转换来强制转换它 - 在这种情况下static_cast是最合适的。

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