草庐IT

c++ - 指向 boost 指针容器中元素的指针

我刚刚开始使用boost::ptr_vector。我有一个ptr_vectorpctr作为一个类A的成员,并希望另一个类B引用pctr中的元素。在构造B类对象时,我想在pctr中存储一个指针。由于指针容器不允许访问指针(但只能访问引用),我必须从pctr中获取引用的地址,然后将其存储在类型B的对象中。但是获取引用的地址似乎不直观。有更好的选择吗? 最佳答案 正如您所发现的,boost指针容器可以很好地保护它们的指针。当然,您可以通过获取它将产生的引用的地址来打败它,但请注意,您可能会通过卡在这些指针上来削弱指针容器对权威所有权的声明

c++ - SCons、Boost::ASIO、Windows 预编译 header 和链接器错误

在为多个平台开发C++时,我正在研究在构建过程中使用SCons。我在构建配置中完成了99%,但我在Windows上遇到了一个非常奇怪的错误,该错误与预编译头文件有关。更奇怪的是,它只发生在一个项目上。在这个项目的SConscript文件中,我有以下内容可以在Windows上编译PCH:ifenv['PLATFORM']=='win32':env['PCH']=env.PCH('MyPCH-LSCommon.pch','Common/src/MyPCH.h')[0]env['PCHSTOP']='"MyPCH.h"'我还设置了编译器标志以强制在项目中的所有文件中包含MyPCH.h:ife

c++ - 为什么 Boost 参数选择继承而不是组合?

我想这个网站上的大多数人都会同意可以通过两种方式外包实现:私有(private)继承作文继承最常被滥用。值得注意的是,当另一种形式或继承本来可以更好时,通常会使用公共(public)继承,并且通常应该使用组合而不是私有(private)继承。当然通常的注意事项适用,但我想不出任何时候我真的需要继承来解决实现问题。对于BoostParameterlibrary但是,您会注意到他们选择了继承而不是组合来实现命名参数习语(对于构造函数)。我只能想到经典的EBO(空基优化)解释,因为我看不到这里没有虚拟方法在起作用。有没有人知道更多或可以将我重定向到讨论?谢谢,马修。

c++ - 有没有一种简单的方法可以在 C++ 中获取缩放的 unix 时间戳

我正在将一些PHP移植到C++。我们的一些数据库代码将时间值存储为unix时间戳*100php包含看起来有点像这样的代码。//PHPstaticfunctiongetTickTime(){returnround(microtime(true)*100);}我需要这样的东西://C++uint64_tgetTickTime(){ptimeJan1st1970(date(1970,1,1));ptimeNow=microsecond_clock::local_time();time_durationdiff=Now-Jan1st1970;returnstatic_cast(diff.tot

c++ - Boost Test 寄存器异常翻译器

有人知道在Boost.Test中使用自动测试用例时如何注册我的自定义异常转换器吗?我找到了一些示例(实际上很少),但它们没有显示如何将此功能与自动测试用例一起使用,这在我看来是boost.test的最大优势。我的示例测试套件:#defineBOOST_TEST_MODULEStateMachineTest#defineBOOST_TEST_DYN_LINK#includeBOOST_AUTO_TEST_SUITE(FirstTest);BOOST_AUTO_TEST_CASE(testBasic){BOOST_CHECK(true);}BOOST_AUTO_TEST_SUITE_END

c++ - Boost.Program_options 固定数量的 token

Boost.Program_options提供了一种通过命令行参数传递多个标记的工具,如下所示:std::vectornums;po::options_descriptiondesc("Allowedoptions");desc.add_options()("help","Producehelpmessage.")("nums",po::value>(&nums)->multitoken(),"Numbers.");po::variables_mapvm;po::store(po::parse_command_line(argc,argv,desc),vm);po::notify(vm

c++ - 依赖于其他库的库的 Libtool 版本控制

我有一个framework在核心应用程序及其界面中使用Boost和CgiCC。我应该如何对库二进制接口(interface)进行版本控制(又名libtool-version-info)?当我进行各种更改时,跟踪库本身的更改没有问题。作为它我很清楚我应该如何版本。但是……Boost和CgiCC库都不提供任何向后兼容的API/ABI,我的库可能与相当任意版本的Boost和CgiCC链接,所以我不能提供任何关于接口(interface)的promise,所以我不能真正指定-version-info因为即使是针对不同版本的Boost和CgiCC编译的相同库将不兼容。那么……我该怎么办?我应该如

c++ - Boost.Spirit.Lex :( 中 Phoenix 占位符 _val 出错

我是Boost.Spirit.Lex的新手。每次我尝试在我的简单词法分析器的语义操作中使用lex::_val时,都会出现一些奇怪的错误:#ifndef_TOKENS_H_#define_TOKENS_H_#include#include#include#include#include#includenamespacelex=boost::spirit::lex;namespacephx=boost::phoenix;enumtokenids{ID_IDENTIFICATOR=1,ID_CONSTANT,ID_OPERATION,ID_BRACKET,ID_WHITESPACES};te

C++容器问题

我正在寻找一些合适的2D元素容器。我想要的是使用例如BOOST_FOREACH遍历容器的每个元素的能力,我还希望能够构建我的容器的subview(切片/子范围),并且可能迭代也通过他们。现在我正在使用boost::numeric::ublas::matrix来实现这些目的,但是,它对我来说并不是一个好的解决方案,因为,它是一个BLAS矩阵,尽管它作为一个普通的2d元素容器表现得非常好(自定义unbounded/bounded存储也很不错)。另一种boost替代方法boost::multi_array不好,因为您无法使用一个BOOST_FOREACH遍历每个元素声明,因为构造View的语

c++ - 找出用于编译可执行文件/DLL 的 Boost 版本

有什么方法可以使用“字符串”或其他一些命令来决定使用哪个版本的Boost来编译特定的可执行文件或.so?我所拥有的只是可执行文件/.so本身。 最佳答案 Boost主要是一个只有头文件的库,广泛使用模板(所有模板都可能编译成一些优化的二进制文件)。仅给定可执行二进制文件,您很可能无法推断出所使用的Boost版本。可能是您了解使用哪个Boost版本的唯一方法是查看可执行文件的版本号(如果有的话),然后在它来自的源代码控制存储库中查找(如果您有权访问它)。 关于c++-找出用于编译可执行文件