草庐IT

visualize-gradient-boosting-decis

全部标签

c++ - 在使用 boost 预处理器序列时避免扩展宏

我正在尝试获取操作系统和编译器名称作为C++中的字符串。尽管对此有很多疑问,但我没有找到明确的答案。所以我尝试使用Boost.Predef1.55,它定义了BOOST_OS_类型的宏。和BOOST_OS__NAME.因此可以简单地做if(BOOST_OS_)returnBOOST_OS__NAME;对于每个操作系统boost支持。与COMP的编译器相同而不是OS.为了避免重复,我想使用Boost.Preprocessor并将它们全部放在一个循环中。我想出的是这个:#defineMAKE_STMT_I2(PREFIX)if(PREFIX)returnPREFIX##_NAME;#defi

c++ - 我可以将 BOOST_FUSION_ADAPT_STRUCT 与继承的东西一起使用吗?

假设我有structcat{inttail;inthead;};structbird{intwing;intbursa;};如果我这样做...structwat:publiccat,publicbird{};BOOST_FUSION_ADAPT_STRUCT(cat,tail,head)BOOST_FUSION_ADAPT_STRUCT(bird,wing,bursa)BOOST_FUSION_ADAPT_STRUCT(wat,wat::cat,wat::bird)...我无法获得构建,但如果我像下面这样显式引用继承的对象,它是完全有效的。#include#includenamespa

c++ - 使用 Boost Hana 反射(reflect) C 风格数组

BOOST_HANA_DEFINE_STRUCT是声明具有内省(introspection)的结构时的绝佳宏。如果我有这样的结构:structPerson{std::stringname;std::stringlast_name;intage;};我们可以像这样重新定义它来添加内省(introspection):structPerson{BOOST_HANA_DEFINE_STRUCT(Person,(std::string,name),(std::string,last_name),(int,age));};但是如果我们有这样的结构呢:structPerson{floateye_di

c++ - boost::interprocess : cout a string variable when iterating through a map that references an object from a struct

我正在使用boost::interprocess在进程之间共享对象。我有两个文件,一个生成结构对象并将该对象传递到具有int索引的映射中的“server.cpp”;和一个“client.cpp”文件,它检索内存数据并遍历数据,输出到控制台。结构看起来像这样:structmydatao{stringMY_STRING;intMY_INT;};和对象:mydatao;o.MY_STRING="hello";o.MY_INT=45;服务器和客户端都能正确编译。但是出于某种原因,如果我尝试访问客户端中的字符串而不是float或整数,客户端可执行文件会抛出段错误。例如下面的second.MY_I

c++ - 如何使用 Boost.Sort string_sort 函数使 C++ 结构快速运行

与成对的指针+长度和std::string相比,我发现对std::string对象进行排序时性能差异非常大我在我的应用程序中进行了大量排序,我发现性能瓶颈在于对大型字符串数组进行排序。我知道进行此类排序的两种好方法-使用std::sort和Boost.sort函数。我正在使用指针和字符串长度信息对大文件的各个部分进行排序我尝试将我的性能与对std::string对象进行排序进行比较,而我的简单指针+长度结构要慢得多。我无法想象-为什么?sizeof(std::string)是32,而sizeof(my_struct)是16字节。两者都是在内部使用::memcmp函数进行比较为了描述这个

c++ - 我怎样才能从 boost::asio::post 获得 future ?

我正在使用Boost1.66.0,其中asio内置支持与futures的互操作(现在已经有一段时间了)。我在网上看到的示例说明了如何在使用async_read、async_read_some等网络功能时干净地实现这一点。这是通过提供boost::asio::use_future来完成的。代替完成处理程序,这会导致启动函数按预期返回future。我需要提供什么样的对象或将我的函数包装在其中才能从boost::asio::post获得相同的行为?我发布工作的目的是在链的上下文中执行它,否则等待工作完成,这样我就可以得到我想做的行为:std::packaged_tasktask([]{std

c++ - Visual Studio 自动完成 C++ 的 Doxygen 标签

有没有办法让visualstudio自动将doxygen标签放在C++源文件中?我的意思是例如这段代码:intfoo(boolp);如果我在上面键入///,VisualStudio会自动生成以下行:///////////////intfoo(boolp);我的问题是:是否可以对doxygen做同样的事情(当我键入/**时)?使VS生成以下内容:/***@brief*@paramp*@return*/intfoo(boolp)我的问题是关于编写文档标签(不生成最终的doxygen)。 最佳答案 VS19中有一个设置可以做到这一点:工具

c++ - boost static_vector 而不是 std::is_trivially_destructible

根据thisexample(左例)#include#includestructX{intk;std::arraya;boost::container::static_vectorb;~X()=default;};inthuh(){std::arrayx;return0;}看起来像boost::container::static_vector当T时可以轻易破坏是(当b被销毁时,不会在X上循环)。huh优化为xoreax,eax;ret(即return0不遍历数组。当我改用具有非平凡析构函数的包含类型时(右例)#include#includestructY{~Y();};structX{i

c++ - Boost phoenix 或 lambda 库问题:从 std::vector 中删除元素

我最近遇到了一个问题,我认为boost::lambda或boost::phoenix可以帮助解决,但我无法获得正确的语法,所以我采用了另一种方式。我想做的是删除“字符串”中小于特定长度且不在另一个容器中的所有元素。这是我的第一次尝试:std::vectorstrings=getstrings();std::setothers=getothers();strings.erase(std::remove_if(strings.begin(),strings.end(),(_1.length()我最终是这样做的:structDiscard{booloperator()(std::set&co

c++ - 用于检查未初始化类成员的工具、Visual Studio 设置

我正在将一个庞大而复杂的C++服务器从Solaris移植到Windows。由于未初始化的成员变量,我面临很多麻烦。在Solaris上,它们默认设置为0值,因此一切正常。但是,在Windows上,这些成员变量会分配垃圾值,从而在系统中造成困惑。代码库太大,无法手动检查每个类。如果成员变量未在构造函数中初始化,您是否知道任何工具或VisualStudio设置会发出警告?提前致谢! 最佳答案 cppcheck在查找未初始化的变量方面做得很好。 关于c++-用于检查未初始化类成员的工具、Visu