草庐IT

boost-program-options

全部标签

c++ - 如何找到 boost 运行时版本

我正在编写一个使用boost的C++库。在这个库中,我想包含有关用于编译我的库的二进制版本的boost版本的信息。我可以使用宏BOOST_VERSION,这很好。我还想确定哪个是boost的运行时版本,以便我可以与用于编译我的库的boost版本进行比较。显然我不能使用宏,因为它会在编译时给我硬编码版本,而不是在运行时。我需要的是boost中的一个函数(比如boost::get_version())。有没有办法在boost中做到这一点? 最佳答案 您可以使用宏创建一些代码,如下所示:std::cout这适用于boost1.51.x及更

c++ - boost .python : Argument types did not match C++ signature

我在python中调用C++函数时遇到一个奇怪的问题。我公开了一个我想从中调用函数的类:class_>("MyClass",init())//....def("someFunc",&MyClass::someFunc);我得到一个std::shared_ptr来自另一个类的成员变量,该类通过.def_readonly(...)公开当我尝试调用该函数时,出现以下错误:File"pytest.py",line27,intest_funccu.someFunc("string")Boost.Python.ArgumentError:PythonargumenttypesinMyClass.s

C++:比较 boost::filesystem 中的路径时如何忽略第一个目录路径?

我正在尝试比较两个目录并找出里面有哪些不同的文件。所以我使用boost::filesystem::recursive_directory_iterator将每个目录的所有内容添加到相应的vector中。然后我按字母顺序对每个vector进行排序并开始比较路径。问题是它包含“基本”路径,我不希望这样,例如:Version1/Assets/info.txtVersion2/Assets/info.txt那些路径比较不同,但我希望它们比较相同。澄清一下,我什至还没有检查二进制文件,到目前为止只是路径名。我会这样比较它们:/Assets/信息.txt我已经浏览了几个小时的boost文档,我相信

c++ - 如何创建boost phoenix make_shared?

是否可以创建std::make_shared的boostphoenix惰性变体?我的意思是,让类似的事情成为可能namespacep=boost::phoenix;...expr=custom_parser[_a=p::make_shared(_1,_2,_3)]>>...由于std::make_shared的可变模板性质,不能使用BOOST_PHOENIX_ADAPT_FUNCTION。所以,如果可能的话,包装器应该是可变参数模板本身。 最佳答案 如果你能省下一组额外的括号:namespace{templatestructmake

c++ - 在 Boost Asio 缓冲区中打包结构

我正在寻找一种通过带有BoostAsio的套接字发送由自定义数据结构组成的数据包的方法。目前我知道你可以发送一个带有标准boostasio缓冲区的字符串(在boost::asio::write(..)方法中)。例如,是否可以将数据从填充的结构发送到服务器或客户端?如果是,我需要怎么做,因为我找不到关于此的文档。 最佳答案 您可以按位复制POD对象。事实上,只要T是POD结构,Asio就接受boost/stdarray、T[]或vector缓冲区。http://www.boost.org/doc/libs/1_55_0/doc/htm

c++ - 如何使 boost::lockfree::queue 动态调整大小

boost::lockfree::queue的文档提到push可以在需要时分配更多空间。然而,我终其一生都无法弄清楚如何实例化这样一个队列,而且我找不到它的例子。boost网站上的所有示例都是固定容量的。这是我正在查看的文档:http://www.boost.org/doc/libs/1_54_0/doc/html/boost/lockfree/queue.html 最佳答案 队列的默认大小是可变的。这由typename...Options模板参数控制。此外,还有一个错误,即使队列大小可变,队列也需要静态设置的容量。这可以通过使用采

c++ - 使用 boost::pool 管理 std::vector 中的内存分配

我想要一个std::vector对象,使用boost::pool分配对象。这样的事情是否正确:classMyClass{private:doubledata;public:MyClass(doubled):data(d){}};intmain(){std::vector>vect;vect.push_back(4.5);vect.push_back(9.8);//Arethesebeingstoredinapoolnow?return0;}此代码有效,但我不完全确定原因。我对分配器的概念很陌生,但如果我理解正确的话,这就是告诉std::vector使用池而不是默认分配器,因此在vect

c++ - 为什么 std::function<boost::any ()> 在这种情况下不起作用?

我遇到过需要这种功能的情况:MoveOnlycreateMoveOnly();存储在这里:std::functionfactory=&createMoveOnly;据我所知,这应该可行,因为MoveOnly可以转换为boost::any使用支持boost.any移动语义的boost1.55,它不起作用。它会触发有关尝试在boost::any的持有者内部为MoveOnly使用已删除的复制构造函数的错误。但是正确选择了Boost.Any的顶级构造函数(它使用模板化的ValueType&&来转发参数)。也许问题出在std::function中。有什么提示吗? 最佳

c++ - Boost::variant 的多态 setter

我正在尝试将boost::variant与模板类型一起使用。例如,我有一个模板类型Tagboost::variantAnyTag包含Tag等类型,Tag和Tag.每个Tag有类型T的成员。现在,我想将这些变体放在一个容器中,并在运行时简单地分配值,例如,for(AnyTag&tag:AllTags){setValue(tag,getValueFromXml());}函数setValue(AnyTag&tag,T&val)必须使用AnyTag标签的运行时类型才能正确地为标签分配正确的值。我尝试解决这个问题可以在下面找到,它使用了另一个变体,它只包含可以在AnyTag(TagValueTy

c++ - Boost模板派生类的序列化

我有一个模板化基类Base和一个模板化派生类Derived,我想将其序列化。下面的简化代码编译并运行但不序列化基类的数据成员。#include#include#include#include#include#include#include#include#includetemplatestructBase{Base(Uuu,Vvv):u(uu),v(vv){}Uu;Vv;};templatestructDerived:publicBase,publicBase{Derived(Ttt):Base(2.0,4),Base(3.0,std::string("hello")),t(tt){}