2014-07-16 4 views
1

내가 가진이 코드표준 : 바인드

struct A { 
    void f(int) {} 
    void g(int, double) {} 
}; 

int main() { 
    using std::placeholders; 
    A a; 

    auto f1 = std::bind(&A::f, &a, _1); 
    f1(5);         // <--- works fine 

    auto f2 = std::bind(&A::g, &a, _1); 
    f2(5, 7.1);        // <--- error! 
} 

나는 컴파일러에서 (GCC 4.8.1)이 오류가 발생합니다 :

error: no match for call to '(std::_Bind<std::_Mem_fn<void (A::*)(int, double)>(A*, std::_Placeholder<1>)>) (int, double)' 
f2(1, 1.1); 
     ^ 

당신이 말할 수를 어디서 오류가 발생 했습니까?

감사합니다,

마시모

+0

경우, 대답은 그것을 받아주십시오. 감사합니다.) – EFrank

답변

2

호출은 다음과 같이 두 매개 변수를 지정하는 요구를 결합하는 내 대답은 당신의 문제를 해결

auto f2 = std::bind(&A::g, &a, _1, _2); 
+0

감사합니다 EFrank! 이것은 가변적 인 템플릿 멤버 함수로 std :: bind()를 사용할 수 없다는 것을 의미합니다. 그게 사실이야? – user1738687

+0

당신은 variadic 템플릿 멤버 함수와 함께 std :: bind를 직접 사용할 수 없다고 생각합니다. http://stackoverflow.com/questions/11902840/binding-member-functions-in-a-variadic-fashion 및 http://stackoverflow.com/questions/18380820/how-to-combine-stdbind-variadic을 참조하십시오. 더 많은 힌트를위한 -templates-and-perfect-forwarding – EFrank