假设您有2个免费功能:
void do_something(dog d);
void do_something(cat c);
不,你想将这些函数传递给模板化函数:
template <typename DoSomethingFunc>
void do_something_template(DoSomethingFunc func);
以避免重载解决冲突的方式调用do_something_template
的首选方法是什么?它会铸造吗?
答案 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)
);