2016-08-26 5 views
0

std :: function의 맵을 생성하려고하는데 몇 개의 매개 변수를 바인딩하려하지만 오류가 발생했습니다. 그래서, 내 표준 : : 함수 정의는std :: function과 std :: map을 사용하여 std :: bind를 사용하는 방법

using abc = std::function<double(const double& t1, const double& t2)>; 

하고지도 내가이 맵에 삽입하려고하는 방법 내가 정의한

conversion_.emplace(
      std::make_pair("a", "b"), 
      std::bind(conversion, 3, std::placeholders::_1)); 

conversion_.find(std::make_pair("a", "b"))->second(4); -- Access 

입니다

std::map<std::pair<std::string, std::string>, abc> conversion_; 

입니다 함수 변환,하지만 내가 아래의 오류를주는 함수에 액세스하려고하면

error: no match for call to ‘(const std::function<double(const double&, const double&)>) (int)’ 

전체 코드를 추가 : 변환 기능은 별도의 파일에 정의되어 있습니다 : 나는지도를 정의하기 위해 노력하고

namespace x 
{ 
    double conversion(const double& a, const double& b); 
} 

헤더 파일

namespace x 
{ 
    class main 
    { 
    public: 
     using abc = std::function<double(const double& t1, const double& t2)>; 
     main(); 
    private: 
     std::map<std::pair<std::string, std::string>, abc> conversion_; 
    }; 
} 

CPP 파일

namespace x 
{ 
main::main() 
{ 
    conversion_.emplace(
     std::make_pair("a", "b"), 
     std::bind(conversion, 3, std::placeholders::_1)); 
    auto m = conversion_.find(std::make_pair("a", "b"))->second(4); 
} 
} 
+0

그것은 '바인딩'호환 개체를 생성하지 않는 것 같습니다. 'conversion'의 선언은 무엇입니까? –

+0

게시 ** 모든 ** 코드. 그와 같은 핵심 세부 사항을 생략 할 수는 없습니다. 올바른 것일 수도 있습니다. –

+0

[mcve]를 게시하십시오. 현재로서는 '변환'이 무엇인지 알지 못합니다. 하지만 그것도 없어도 : abc는 두 개의 매개 변수의 함수이지만 하나만 사용하면됩니다. 저것 좀 봐. – Angew

답변

3

conversiondouble(const double& t1, const double& t2)과 같은 기능을합니다. 그렇다면 std::bind(conversion, 3, std::placeholders::_1)은 하나의 인수 인 double (conversion의 다른 인수는 3으로 고정 됨)을 필요로하는 함수자를 정의하고 double을 반환합니다. 당신은 단지 수정해야만합니다 abc 안으로 std::function<double(const double& t1)>;

관련 문제