2011-03-08 56 views
3

我試圖通過調用std :: make_shared上的std :: bind來創建一個返回shared_ptr的函數,但是語法超出了我,或者它甚至不是可能?如下所示,假設MyBar的構造函數接受一個MyFoo的const引用:std ::將一個調用綁定到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 2011-03-08 21:33:21

相關問題