草庐IT

ZN5boost

全部标签

c++ - Boost 程序选项中的 vector 参数

我有两个相关的问题:使用BoostProgramOptions允许传递一系列值的最简单方法是什么?我的目标是避免使用prog--opt1--opt2--opt3并改为使用prog--opt123。最简单的方法是选择恰好两个数字的选项,例如prog--opt13742?(我不需要任何“免费”程序参数。) 最佳答案 这是一个迟到的答案,但我希望它对某人有所帮助。您可以轻松地在第1项中使用相同的技术,但您需要对vector中的项数添加另一个验证:来自rcollyer的示例:namespacepo=boost::program_option

c++ - boost::shared_ptr 和 std::shared_ptr 的共存

我想在某个时候使用boost::log,但我不能将std::shared_ptr作为参数传递,因为编译器(VS2010)无法转换将其转换为boost::shared_ptr。我真的不喜欢他们彼此是外星人这一事实。是否有一种安全且透明的方式将一个转换为另一个,以免它们相互绊倒?我不认为它与thisquestion重复这表明两者是相同的。 最佳答案 你可以这样做:templateboost::shared_ptrmake_shared_ptr(std::shared_ptr&ptr){returnboost::shared_ptr(pt

c++ - boost.org 的 Spirit 解析器生成器框架有哪些缺点?

在几个问题中,我看到了对Spirit的建议。解析器生成器框架来自boost.org,但是在评论中,使用Spirit的人不开心的提示。请那些人站出来向我们解释一下使用Spirit的缺点或缺点是什么? 最佳答案 这是一个很酷的想法,我喜欢它;真正学习如何使用C++模板特别有用。但他们的文档建议将spirit用于中小型解析器。完整语言的解析器需要很长时间才能编译。我将列出三个原因。无扫描仪解析。虽然它相当简单,但当需要回溯时,它可能会减慢解析器的速度。虽然它是可选的-可能会集成词法分析器,请参阅使用Spirit构建的C预处理器。大约300

c++ - 使用 boost 或 STL 对 C++ 中的压缩(锁定)容器进行排序

我想做的事:我想将2个、3个或N个vector排序,锁定在一起,不将它们复制到一个元组中。也就是说,抛开冗长,例如:vectorv1={1,2,3,4,5};vectorv2={11,22,33,44,55};vectorv3={111,222,333,444,555};typedeftupletup_t;sort(zip(v1,v2,v3),[](tup_tt1,tup_tt2){returnt1.get()>t2.get();});for(auto&t:zip(v1,v2,v3))cout()()()这应该输出:555555444444...111111我现在是怎么做的:我已经实现

c++ - 如何仅使用 boost 将字符串编码为 base64?

我正在尝试将一个简单的ASCII字符串快速编码为base64(使用boost::asio的基本HTTP身份验证),而不是粘贴任何新代码或使用boost之外的任何库。简单的签名看起来像:stringBase64Encode(conststring&text);我再次意识到该算法很简单,并且有很多库/示例这样做,但我正在寻找一个干净的boost示例。我发现了boost序列化,但那里或谷歌没有明确的例子。http://www.boost.org/doc/libs/1_46_1/libs/serialization/doc/dataflow.html如果不将实际的base64算法显式添加到我的

c++ - Boost::Tuples vs Structs 返回值

我正试图了解元组(感谢@litb),使用它们的常见建议是返回>1值的函数。这是我通常会使用结构的东西,在这种情况下我无法理解元组的优势-对于最终懒惰的人来说,这似乎是一种容易出错的方法。Borrowinganexample,我会用这个structdivide_result{intquotient;intremainder;};使用元组,您将拥有typedefboost::tupledivide_result;但是,如果不阅读您正在调用的函数的代码(或注释,如果您愚蠢到相信它们),您将不知道哪个int是商,反之亦然。好像有点……structdivide_result{intresults

c++ - 使用 boost 线程和非静态类函数

所以我做了一些研究,发现你可以创建一个boost::thread对象,并通过使用“this”和boost::bind等来让它从一个非静态类函数开始。它真的没有对我来说很有意义,我能找到的所有示例都在与它开始的函数相同的类中启动了boost::thread对象,因此可以使用它。然而,我正在另一个类中启动线程,所以我担心使用“this”,我会说“this”来self创建线程的类,而不是函数所在的类(我可能错了,我需要更多地了解这个“这个”家伙)。这是我遇到问题的来源的示例。ANNGUI.hclassANNGUI{private:boost::thread*GUIThread;Main*GU

c++ - 将 BOOST_FOREACH 与 std::map 一起使用

我想使用BOOST_FOREACH遍历std::map并编辑值。我不太明白。typedefstd::pairIdSizePair_t;std::mapmmap;mmap[1]=1;mmap[2]=2;mmap[3]=3;BOOST_FOREACH(IdSizePair_ti,mmap)i.second++;//mmapshouldcontain{2,3,4}here当然,这不会改变任何事情,因为我没有通过引用进行迭代。所以我用这一行代替(根据Boost文档中的示例):BOOST_FOREACH(IdSizePair_t&i,mmap)我得到编译器错误:errorC2440:'initi

c++ - 如何故意删除 boost::shared_ptr?

我有很多boost::shared_ptr对象,并且在某些时候我故意想要delete其中一些释放一些内存。(那时我知道我再也不需要指向MyClass的对象了。)我该怎么做呢?我想你不能只调用delete()使用我通过get()获得的原始指针.我见过一个函数get_deleter(shared_ptrconst&p)在boost::shared_ptr,但我不知道如何使用它,而且它旁边还写着experimental。(我想我有Boost1.38。)也许只是分配一个新的空boost::shared_ptr变量?那应该丢弃旧值并将其删除。 最佳答案

c++ - 使用 gdb 调试 C++ STL/Boost 的最佳实践

使用gdb调试,任何使用STL/boost的c++代码仍然是一场噩梦。任何使用过STL的gdb的人都知道这一点。例如,在代码here中查看一些调试session的示例运行。.我正在尝试通过收集提示来减轻痛苦。您能否评论一下我在下面收集的提示(特别是您一直在使用的提示以及您建议对它们进行的任何更改)-我列出的提示是技术性的降序。有人在用"StanfordGDBSTLutils"吗?和"UCFGDButils"?是否有一些用于boost数据结构的工具?上面的实用程序似乎不能递归使用,例如用于在一个命令中以清晰的方式打印boost::shared_ptr的vector。编写您的.gdbini