草庐IT

ZN5boost

全部标签

c++ - Boost线程泄漏C++

有人可以告诉我boost线程库是否泄漏。在我看来,它确实:谷歌说我应该用我正在做的boostthread和pthread进行编译,并且在1.40版中这个问题已经得到解决,但我仍然得到泄漏。请注意,这可以正常编译,但会检测到泄漏。#include#includevoidt1(){}intmain(void){boost::threadth1(t1);th1.join();return1;}使用Valgrind我得到以下输出HEAPSUMMARY:==8209==inuseatexit:8bytesin1blocks==8209==totalheapusage:5allocs,4frees

c++ - 使用强 typedef 作为 Boost Parameter 库的更轻量级替代方案?

我经常使用Booststrongtypedef实用程序来boost我的程序的安全性。例如通过编写如下代码:BOOST_STRONG_TYPEDEF(int,X)BOOST_STRONG_TYPEDEF(int,Y)BOOST_STRONG_TYPEDEF(int,Width)BOOST_STRONG_TYPEDEF(int,Height)structRect{Rect(Xx,Yy,Widthw,Heighth);};//Usage:Rectrect(X(10),Y(20),Width(800),Height(600));这里的强typedefboost了代码的可读性和安全性。(如果参数

c++ - 如何使用 boost 程序选项获取默认参数值?

我想为我的一些命令行参数使用默认值。我如何告诉program_options默认选项是什么,如果用户不提供参数,我如何告诉我的程序使用默认值?假设我想要一个参数,指定要发送的机器人数量,默认值为3。robotkill--robots5将产生5个机器人已经开始了硅革命,而robotkill(不提供参数)将产生3个机器人已经开始了硅革命。 最佳答案 当用户不提供这些选项时,program_options会自动为选项分配默认值。您甚至不需要检查用户是否提供了给定选项,只需在任何一种情况下使用相同的分配即可。#include#include

c++ - Boost 程序选项允许输入值集

有没有办法为参数设置一组允许的输入变量?例如参数“arg”只能有“cat”和“dog”之类的字符串值。 最佳答案 您可以使用customvalidator特征。为您的选项定义一个不同的类型,然后在该类型上重载validate函数。structcatdog{catdog(std::stringconst&val):value(val){}std::stringvalue;};voidvalidate(boost::any&v,std::vectorconst&values,catdog*/*target_type*/,int){usi

C++ boost解析动态生成的json字符串(不是文件)

我正在尝试做一个读取json字符串的最小示例,该字符串作为带有boost的命令行arg传递。我对C++非常陌生,而且还想boost。我的代码是:intmain(intargc,char**argv){boost::property_tree::ptreept;boost::property_tree::read_json(argv[1],pt);cout("foo");}我这样调用它./myprog"{\"foo\":\"bar\"}"但我收到“无法打开文件错误”。如何boost读取std::string或char*而不是文件的速度?谢谢 最佳答案

c++ - 如何使用 boost::program_options 接受可选标志?

我需要实现一个可选标志,例如-f/--flag。由于这是一个标志,因此没有关联的值。在我的代码中,我只需要知道是否设置了标志。使用boost::program_options的正确方法是什么? 最佳答案 一个方便的方法是使用bool_switch功能:boolflag=false;namespacepo=boost::program_options;po::options_descriptiondesc("options");desc.add_options()("flag,f",po::bool_switch(&flag),"de

c++ - 在工作完成后立即删除 boost::thread 对象的最佳方法是什么?

我用new操作符创建boost::thread对象并继续而不等待该线程完成其工作:voiddo_work(){//performsomei/owork}boost::thread*thread=newboost::thread(&do_work);我猜,工作完成后需要删除thread。在不显式等待线程终止的情况下,最好的方法是什么? 最佳答案 boost::thread对象的生命周期与native线程的生命周期无关。boost::thread对象可以随时超出范围。来自boost::thread类documentationJustas

c++ - 在 ubuntu 10.04 下安装最新的 1.44 boost 库

我有ubuntu10.04,想安装最新的boost库1.44_0我下载了tar.gz文件并解压到/usr/local/boost_1_44_0我已经从synaptic安装了boost1.40版本。所以我想针对1.44进行编译和链接,因为我想使用一些新的库不在旧版本中,例如属性树。但是,我遇到了一些问题。运行sudo./bootstrap.sh(一切正常)运行./bjaminstallbzip2出现错误。gcc.compile.c++bin.v2/libs/iostreams/build/gcc-4.4.3/release/threading-multi/file_descriptor.

c++ - Boost::asio winsock 和 winsock 2 兼容性问题

我的项目使用windows.h,其中使用了winsock.h,我需要包含使用winsock2的boost:assio。所以我收到很多错误,说Winsock.h已经包含在内。我可以定义WIN32_LEAN_AND_MEAN。这样windows.h就不会使用winsock。问题是,我需要windows.h来使用它,而我只需要Asio来实现异步计时器。我不需要它的winsock2.h。我尝试搜索如何禁用它的winsock2使用,我发现我可以通过在包含boost:asio之前定义BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN来做到这一点,但我仍然得到同样的错误。#inclu

c++ - 如何使用大小未知的 boost::array 作为对象变量

我想使用boost::array作为类成员,但我不知道编译时的大小。我想过这样的事情,但它不起作用:intmain(){boost::arrayarray={{1,2,3,4}};MyClassobj(array);}classMyClass{private:boost::arrayarray;public:templateMyClass(boost::arrayarray):array(array){};};编译器gcc说:error:type/valuemismatchatargument2intemplateparameterlistfor‘templatestructboost