我正在尝试将函数指针传递给std :: function参数。这是更大代码的一部分。我想知道是否可以这样做?我知道std :: function可以从函数指针赋值。
#include <functional>
#include <iostream>
template<typename R, typename ...Args>
void storeFun(std::string funcName, std::function<R(Args...)> funcPtr){
std::cout << funcPtr(2);
}
template<typename R, typename ...Args, typename funcType>
void storeFun2(std::string funcName,funcType funcPtr){
std::function<R(Args...)> f22 = funcPtr;
std::cout << f22(2);
}
int fun1(int a){
return a;
}
int main(){
storeFun("fun1",fun1);
storeFun2("fun1",fun1);
return 0;
}
答案 0 :(得分:1)
你需要使你的函数指针可以推导出来:
template<typename R, typename ...Args>
void storeFun(std::string funcName, R (*funcPtr)(Args...)){
std::function<R(Args...)> f22 = funcPtr;
std::cout << f22(2);
}
storeFun("fun1",fun1);
或者您可以使用显式参数调用它:(如果fun1
超载并且您不希望将static_cast
转换为所需类型,则非常有用)
storeFun<int, int>("fun1",fun1);