假设您有 2 个免费功能:
void do_something(dog d);
void do_something(cat c);
不说你想将这些函数传递给模板函数:
template <typename DoSomethingFunc>
void do_something_template(DoSomethingFunc func);
do_something_template
以避免重载解决冲突的方式调用的首选方式是什么?会铸造吗?
假设您有 2 个免费功能:
void do_something(dog d);
void do_something(cat c);
不说你想将这些函数传递给模板函数:
template <typename DoSomethingFunc>
void do_something_template(DoSomethingFunc func);
do_something_template
以避免重载解决冲突的方式调用的首选方式是什么?会铸造吗?
您可以强制转换或使用本地函数指针变量。
void (*p)(dog) = do_something;
do_something_template(p);
do_something_template(static_cast<void(*)(cat)>(do_something));
是的,只需投射它:
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));
}
您可以使用 C++ 强制转换 - 在这种情况下static_cast
是最合适的。
do_something_template(
static_cast<void(*)(dog)>(do_something)
);