gpt4 book ai didi

c++ - boost::factory 和 std::function

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:09 25 4
gpt4 key购买 nike

我试图在 gcc 4.7.2 上将一些代码转换为 C++11。部分代码包括 boost::factory 的分配到 boost::function .但是,如果我将其更改为 std::function,编译将失败并出现很多警告.这是重现错误的示例代码:

#include <boost/functional/factory.hpp>
#include <boost/function.hpp>
#include <functional>

struct S {
S(int) {}
};

int main() {

boost::function<S*(int)> b = boost::factory<S*>(); // ok

std::function<S*(int)> s = boost::factory<S*>(); // error
}

这给出了 error: no match for call to ‘(boost::factory<S*>) (int)’

有趣的是,如果 S不带参数,std::function<S*()>分配给 boost::factory毫无怨言。为什么这不起作用?是否有解决方法允许分配 boost::factorystd::function ?我正在使用 Boost.1.53

最佳答案

似乎boost::factory<S*>坚持将其参数绑定(bind)到引用:

boost::factory<S*> factory;

factory(17); // error

int argument(17);
factory(argument); // OK

据此看来boost::function<S*(int)>将参数作为 int 传递没有在 std::function<S*(int)> 时完美转发它似乎在论点上使用了完美转发。因此,参数不能绑定(bind)到 boost::factory<S*>争论。

使用 gcc 时的 std::function<...>通过 const& 传递参数作品:

std::function<S*(int const&)> factory = boost::factory<S*>();

不幸的是,同样的解决方法不适用于 std::function<...>来自 libc++。既然您说过您尝试使用 gcc 编译代码,那么这可能不是什么大问题。

关于c++ - boost::factory 和 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com