我想创建一个函数对象,通过在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);
我想创建一个函数对象,通过在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);
您已经接近成功了;您只需指定make_shared
的附加参数以指示其接受的参数类型。这些通常是推断出来的,但如果您在绑定表达式中未指定它们,则尝试默认构造MyBar
对象。
std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor =
std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1);