2016-10-19 147 views
0

我想将一个函数指针传递给std :: function参数。这是更大代码的一部分。我想知道是否有可能这样做?据我所知,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

你需要让你的函数指针推断出:

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); 
相关问题