草庐IT

boost-move

全部标签

c++ - CMake 错误 : common is required but boost was not found

我正在尝试使用cmake_3.5.0编译opencv_2.4.9以在Qt_5.3.2MinGW中运行一个项目,但它一直显示此错误:Commonneededbutcan'tfindboost我选择“MinGWMakefiles”作为生成器并在配置窗口中“指定native编译器”。我定义了BOOST_ROOT环境变量,这是我的CmakeLists.txt:cmake_minimum_required(VERSION2.8FATAL_ERROR)SET(sampleNameMyApp)set(Boost_USE_STATIC_LIBSON)set(Boost_USE_STATICON)set

c++ - 从 boost::shared_ptr<string> 返回 C 字符串

我将一些C++代码包装在函数中,以便使C++方法在C中可用。C++API方法返回boost::shared_ptr通常的对象。我在C++中导出的函数如下所示:extern"C"constchar*Hazelcast_Map_get_int_string(Hazelcast_Client_t*hazelcastClient,constchar*mapName,intkey,char**errptr){IMapmap=hazelcastClient->client->getMap(mapName);boost::shared_ptrvalue=map.get(key);string*str

python - 为什么不能使用 std::ref 将对象传递到 Boost.Python 模块中?

环境:使用Python3.5编译的Boost1.61.0以下C++代码输出12:classA{public:intfunc(){return12;}};BOOST_PYTHON_MODULE(bridge){usingnamespaceboost::python;class_("A",no_init).def("func",&A::func);}intmain(){Aa;PyImport_AppendInittab("bridge",PyInit_bridge);Py_Initialize();usingnamespaceboost::python;dictdictMain=extra

c++ - 将 C++11 move 语义应用于绑定(bind)函数

我有一些现有的C++98代码,它们使用boost::function和boost:bind进行异步回调。一些相关的简化代码片段包括:typedefboost::functionWriteHandler;structWriteOperation{WriteOperation(constboost::shared_ptr&device,conststd::string&data,constWriteHandler&handler):m_Device(device),m_Data(data),m_Handler(handler){}private:boost::shared_ptrm_Dev

c++ - 在没有 move 构造函数的情况下返回不可复制对象的解决方法

在我的API中,我有一个返回std::istringstream的函数.std::istringstreamclass是不可复制的,但支持move,因此在符合标准的编译器上返回本地没有问题std::istringstream.但是,在gcc4.9上,有nosupportmovestd::istringstream.有没有我可以使用的解决方法std::istringstream无需从用户的角度更改API?建议的解决方法here,使用unique_ptr将改变API的语义。 最佳答案 如果你不能movestd::istringstrea

c++ - 如何将严重程度与 Boost 日志中的相同宽度对齐

例如,'info'和'warning'的宽度不同,在日志中看起来不漂亮。我想在日志中将它们对齐到相同的宽度。看来我可以使用本文所述的自定义格式化程序工厂:boostlogformatsingleattributewithlogging::init_from_stream这是使用自定义严重级别的另一种解决方案:howdoIformatacustomseverity_levelusingaformatstring除此之外,是否有更简单的方法来实现这一点,就像printf一样自定义格式字符串? 最佳答案 您可以尝试将格式化程序设置为类似e

c++ - Boost.Filesystem 和 C++ 标准文件系统库有多相似?

我需要一个文件系统库,以便与支持C++11的编译器或支持C++14的编译器一起使用-所以它不能来自C++17。现在,我知道进入C++17的文件系统库是基于Boost::Filesystem的;但是-它们是否足够相似,让我可以使用Boost库,然后在以后无缝切换到标准版本,而不需要改变,比如using语句?或者两者之间是否存在(次要/重大)差异?我知道对于variant,Boost和标准库版本有很大不同。 最佳答案 有许多不同之处。我相信,有些是从未传播过的Boost更改。例如,没有path.filename_is_dot()查询(如

c++ - vector 增长时如何强制执行 move 语义?

我有一个std::vector对象的某个类A。该类非常重要,并且定义了复制构造函数和move构造函数。std::vectormyvec;如果我用A对象填充vector(使用例如myvec.push_back(a)),vector的大小会增加,使用复制构造函数A(constA&)实例化vector中元素的新拷贝。我能否以某种方式强制开始使用类A的move构造函数? 最佳答案 您需要使用noexcept通知C++(特别是std::vector)您的move构造函数和析构函数不会抛出异常。然后move构造函数将在vector增长时被调用。

c++ - 双参数和 move 语义

假设我有以下foo函数:Widgetfoo(Widgetlhs,Widgetrhs){returnlhs.bar(rhs);}然后我想在两边使用相同的参数:Widgetbaz(Widgetw){returnfoo(w,w);}碰巧Widget很大,我想避免复制太多。假设bar就位,我可以执行以下操作:Widgetbaz(Widgetw){returnfoo(std::move(w),w);}这只会制作一份拷贝。但我担心这是不正确的代码,因为参数传递顺序在C++中未指定,我可能会给出一个移出的参数。我改为执行以下操作:Widgetbaz(Widgetw){Widgetw_bis(w);r

c++ - 如何使用 boost::latch?

我试图在我的程序中使用boost::latch来阻止等待,直到所有线程完成或超时。我的代码如下。ctpl是从https://github.com/vit-vit/CTPL采用的线程池库.#include#include#include#includeusingnamespacestd;intmain(intargc,char**argv){ctpl::thread_poolouter_tp(100);ctpl::thread_poolinner_tp(5,5000);autoout_func=[&inner_tp](intouter_id,intouter_invoke_idx){in