2011-03-08 5 views
3

std :: make_shared에서 std :: bind를 호출하여 shared_ptr을 반환하는 펑터를 만들려고하는데 구문이 나를 넘어서거나 아니면 짝수가 아닌 것입니다. 가능한? MyBar의 생성자를 가정하고 다음과 같이 뭔가는 MyFoo에 const를 참조한다 :std :: bind std :: make_shared에 대한 호출

std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = std::bind(&std::make_shared<MyBar>, std::placeholders::_1); 

답변

7

당신은 거의 거기를; 받아들이는 매개 변수 유형을 나타 내기 위해 추가 인수를 make_shared으로 지정하면됩니다. 이들은 일반적으로 추론되지만, 바인드 식에서 지정하지 않으면 MyBar 객체를 기본 생성하려고합니다.

std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = 
    std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1); 
+0

좋은 캐치, 감사합니다! – tgoodhart