草庐IT

boost-move

全部标签

c++ - 为什么 Boost.ProgramOptions 不是只有标题?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion有些boost库是只有头文件的,有些不是,出于各种原因等等。Boost.ProgramOptions不是header-only是否有特定原因/设计决定?我想知道,因为它在其文档中声称是一个“小型”库,而且我没有看到任何与系统相关的原因(如线程或asio)。

c++ - Boost.Test 测试静态库

我正在使用Boost.Test进行单元测试。因为一些原因,我想在不同的静态库上编写单元测试用例。问题是当我这样做时,自动注册器不工作。例如,如果我有类似的东西://foo_tests.cpp#defineBOOST_TEST_MODULE"Foo"#includeBOOST_AUTO_TEST_CASE(Bar){BOOST_CHECK(false);}//usedtogeneratelibFooTests.a//main.cpp#defineBOOST_TEST_DYN_LINK#defineBOOST_TEST_MAIN#include//usedtogeneratemain.o然

c++ - Boost::asio、共享内存和进程间通信

我有一个应用程序专门使用boost::asio作为输入数据源,因为我们的大多数对象都是基于网络通信的。由于某些特定要求,我们现在还需要能够使用共享内存作为输入法。我已经编写了共享内存组件,它运行得相当好。问题是如何处理从共享内存进程到消费应用程序的数据可以读取的通知——我们需要处理现有输入线程中的数据(使用boost::asio),我们还需要不阻塞等待数据的输入线程。我通过引入一个中间线程来实现这一点,该线程等待共享内存提供程序进程发出的事件信号,然后将完成处理程序发布到输入线程以处理数据读取。这现在也可以工作,但是中间线程的引入意味着在大量情况下,我们在读取数据之前有一个额外的上下文

c++ - Boost.Filesystem 中的 MAX_PATH 限制

我想使用Boost.Filesystem库来操作路径、文件和目录。我的问题是是否支持长于MAX_PATH的路径?我知道在Win32API中我们有解决方法“\\?\”,但它不受PathAppend和PathCombine等基本函数的支持。所以我正在寻找有关MAX_PATH和Boost.FS的任何有用信息。谢谢UPD:我关心所有操作,如路径追加、路径合并等(我在Win32API中有这些函数,但它们不适用于比MAX_PATH长的路径)例如CreateFileW和DeleteFileW都支持比MAX_PATH长的路径。可能Boost.FS可以替代Win32API实用程序函数,例如shlwapi

c++ - 是否有必要定义来自不同类的 move 构造函数?

考虑以下几点:structX{Yy_;X(constY&y):y_(y){}X(Y&&y):y_(std::move(y)){}};是否有必要像第二个那样定义一个构造函数以充分利用move语义?还是会在适当的情况下自动处理? 最佳答案 是的,但不是。你的代码应该是这样的:structX{Yy_;X(Yy)://eithercopy,move,orelideaYy_(std::move(y))//andmoveittothemember{}};如果您在设计中说过“我需要我自己的数据拷贝”*,那么您应该按值获取参数并将其move到需要的

c++ - 根据析构函数和 move 构造函数实现 move 赋值

假设我有一个管理内存的类,因此需要用户定义的特殊成员函数(想象vector或类似的)。考虑以下move赋值运算符的实现:Class&operator=(Class&&rhs){this->~Class();//calldestructornew(this)Class(std::move(rhs));//callmoveconstructorin-place}以这种方式实现move赋值运算符是否有效?也就是说,以这种方式调用析构函数和构造函数不会违反语言中的任何对象生命周期规则吗?以这种方式实现move赋值运算符是一个好主意吗?如果不是,为什么不,是否有更好的规范方法?

c++ - 为什么在返回兼容类型时需要显式 std::move?

我正在看STL的“Don’tHelptheCompiler”演讲,他在幻灯片26上有一个类似的例子:structA{A()=default;A(constA&){std::coutget_pair(){std::pairp;returnp;}std::tupleget_tuple(){std::pairp;returnp;}std::tupleget_tuple_moved(){std::pairp;returnstd::move(p);}有了这个,下面的调用:get_pair();get_tuple();get_tuple_moved();产生这个输出:movedmovedcopie

C++ move 语义 - 包装遗留 C API

我正在使用旧版CAPI,在该API下获取某些资源非常昂贵,释放该资源绝对至关重要。我正在使用C++14,我想创建一个类来管理这些资源。这是这件事的基本框架...classThing{private:void*_legacy;public:voidOperation1(...);intOperation2(...);stringOperation3(...);private:Thing(void*legacy):_legacy(legacy){}};这不是真正的单例模式。没有什么是静态的,可能有很多Thing例如,所有这些都管理着自己的遗留资源。此外,这不仅仅是一个智能指针。包裹指针,_

c++ - boost::filter_iterator——我将如何使用 STL 做到这一点?

我收到了一个迭代器,我必须将它传递给另一个函数——但经过过滤以便跳过某些元素(这是一个指针范围,我想过滤掉NULL指针)。我在谷歌上搜索了“STLfilteriterator”以查看如何执行此操作,并且boost::filter_iterator上来了。这看起来不错,我可以使用它,但我也可以使用良好的旧STL来实现吗?当然,无需将元素复制到新容器中。我想我必须创建另一个迭代器类来提供必要的begin()、end()等函数并进行过滤?所以我必须重新实现boostiterator_filter...? 最佳答案 你是对的;您实际上是在自

c++ - 使用 Boost::Spirit 的简单表达式解析器示例?

有没有人知道在线资源,在那里我可以找到如何使用Boost::Spirit编写简单的表达式解析器?我不一定需要评估表达式,但我需要解析它并能够返回一个bool值来指示表达式是否可解析(例如,括号不匹配等)。我需要解析器能够识别函数名称(例如foo和foobar),因此这也是一个有用的示例来帮助我学习编写BNF表示法。表达式将是正规的算术方程式,即由以下符号组成:开始/结束括号算术运算符识别函数名称,并检查其所需的参数 最佳答案 这里有一些旧的Spirit原型(prototype)代码:#include#include#include#