c++ - 将可变函数指针分配给 std::function

标签 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;
}

最佳答案

你需要让你的函数指针可推导:

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

关于c++ - 将可变函数指针分配给 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40142353/

相关文章:

c++ - 递归可变参数模板无法推导出参数

c++ - 编译器支持 STL 容器中的有状态分配器

c++ - 调用一个小函数两次(例如在 if 条件和主体中)是否比将结果存储在局部变量中更可取?

c++ - make_unique 不编译

c++ - 给出奇怪值的字符串

c++ - va_list c++ 的问题

c++ - C++ 中包装器类的大小写相关可变性(例如 uint8_t 数组包装器)

c++ - 在 heapsort 程序中出现 sigabrt 错误

c++ - 静态对象是否保证被初始化

c++ - 将数组的值解包为可变参数函数的参数