2016-10-19 6 views
0

std :: function引数に関数ポインタを渡そうとしています。これはより大きなコードの一部です。私はそれが可能かどうかを知りたいのですか?私はstd :: functionが関数ポインタから代入可能であることを知っています。std :: functionへのvariadic関数ポインタの割り当て

あなたの関数ポインタを演繹ようにする必要があり
#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); 
関連する問題