为std :: function分配可变参数函数指针

时间:2016-10-19 22:11:00

标签: c++ c++11 variadic-templates

我正在尝试将函数指针传递给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;
}

1 个答案:

答案 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);