我试图通过在std :: make_shared上调用std :: bind来创建一个返回shared_ptr的仿函数,但是语法超出了我,或者甚至不可能?假设MyBar的构造函数对MyFoo采用const引用:
,如下所示std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = std::bind(&std::make_shared<MyBar>, std::placeholders::_1);
答案 0 :(得分:7)
你快到了;您只需要指定make_shared
的附加参数来指示它接受的参数类型。这些通常是推导出来的,但是如果你没有在绑定表达式中指定它们,那么它会尝试默认构造MyBar
对象。
std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor =
std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1);