5

假设您有 2 个免费功能:

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

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

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

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

4

3 回答 3

5

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

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

do_something_template(static_cast<void(*)(cat)>(do_something));
于 2013-07-30T08:49:28.037 回答
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));
}
于 2013-07-30T08:49:18.687 回答
0

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

do_something_template(
    static_cast<void(*)(dog)>(do_something)
);
于 2013-07-30T08:50:28.543 回答