草庐IT

boost-move

全部标签

c++ - 可以 boost 公历日期和 boost posix 时间正确计算 unixtime 吗?

我正在尝试编写一个简单的时间戳系统,它提供当前时间的纪元秒和小数秒。我正在使用boost库并且有这样的东西:constboost::posix_time::ptimeepoch(boost::gregorian::date(1970,1,1));boost::posix_time::ptimetime(){boost::posix_time::ptimenow=boost::posix_time::microsec_clock::universal_time();returnnow;}boost::posix_time::time_durationdur=(time()-epoch);

c++ - boost::ref 没有发生匹配调用错误,但 std::ref 没有

我已经编写了一些代码,使用仿函数和boost::中的ref和bind模板计算vector元素的数量>或std::(对于C++11)命名空间。我正在使用#define在boost::和std::命名空间之间切换。我使用的是boost版本1.53,我的编译命令是g++test.cpp-std=c++11。我已经尝试使用gcc版本4.7.2和4.6.3,但我在这两个版本上都遇到了同样的错误。我有3个问题:我不明白为示例2生成的错误。是否可以仅通过切换命名空间来使这样的代码具有可移植性?是否有很好的引用资料详细描述了bind的std和boost版本之间的差异,ref和功能?(我看到了this问

c++ - 使用 Boost.Proto 构建 Eigen 表达式模板

我想使用Boost.Proto将嵌入式领域特定语言转换为一系列使用Eigen库实现的矩阵运算。由于效率很重要,我希望proto生成Eigen表达式模板并避免过早评估。我实现了一个可以生成矩阵乘法表达式的简单语法。下面的代码在没有警告的情况下编译(在g++4.8.0和IntelC++2013.3上,使用Boost1.54.0和Eigen3.1.3)并且只要我的表达式只有一个乘法运算就可以工作。一旦我向链中添加更多乘法,它就会崩溃。Valgrind告诉我,这是因为Eigen::GeneralProduct表达式模板之一在求值完成之前被销毁了。我不明白为什么会发生这种情况,或者我可以做些什么

c++ - boost::lexical_cast<> 的语言环境不变保证

我正在使用boost::lexical_cast(double)用于将double转换为字符串,生成JSON序列化字节流,即(在远程端)由.NET解析。我能够强制.NET使用InvariantCulture用于解析,从而在每种可能的语言上返回可预测的结果。但是,我无法在boost::lexical_cast中找到此保证文档。我试了一下,对于不同的区域设置,它的工作方式相同。但是,我不能仅从几个测试中确定,我是否遗漏了文档中的某些内容,或者根本无法保证这一点,我必须使用其他东西吗?编辑:我发现了一个问题。std::locale::global(std::locale("Czech"));

c++ - 为什么 vector 被认为是 nothrow_move_constructible?

vector的移动构造函数的规范是(从标准中复制出来的):vector(vector&&);注意缺少noexcept.但是gcc4.8和Clang3.2都报告了std::is_nothrow_move_constructible>::value返回真(即1):#include#includeintmain(){std::cout>::value造成这种明显差异的原因是什么? 最佳答案 标准允许实现根据方法加强异常规范17.6.5.12Restrictionsonexceptionhandling[res.on.exception.h

c++ - 编译器是否可以在仅引用一次时隐式 std::move 参数?

假设我有一个带有setter的简单类:classMyClass{public:voidsetName(std::stringname){_name=std::move(name);}private:std::string_name;};我在这里使用std::move,但是如果我忽略它而只写_name=name,编译器是否可以隐式movename参数,因为它没有在setter的其他任何地方使用?它几乎可以被视为赋值表达式中的右值,因为它在其他任何地方都没有被名称引用。编译器能做到吗?现有的编译器会这样做吗? 最佳答案 在什么之上添加N

c++ - 了解 Boost.spirit 的字符串解析器

#include#includenamespaceqi=boost::spirit::qi;intmain(){usingqi::string;std::stringinput("a");std::string::iteratorstrbegin=input.begin();std::stringp;boolok=qi::phrase_parse(strbegin,input.end(),((string("a")>>string("a"))|string("a")),qi::space,p);if(ok&&strbegin==input.end()){std::cout这个程序输出a

c++ - 防止 Boost Spirit Symbol 解析器过早接受关键字

当以有效关键字(符号)开头时,如何防止BoostSpirit符号解析器接受关键字(符号)。我希望该构造无法将“ONEMORE”作为一个整体进行解析,并且无法成功解析“ONE”,因为这是一个有效的关键字,然后在“MORE”上失败。下面是代码的实际输出:Keywordasanumber:1Keywordasanumber:2Keywordasanumber:1Invalidkeyword:MORETHREE这就是我喜欢的样子:Keywordasanumber:1Keywordasanumber:2Invalidkeyword:ONEMOREKeywordasanumber:3该代码只是一个

c++ - boost 正则表达式 : [:alpha:] and accented characters

我正在尝试使用Boost将字符串中的每个非字母字符替换为"":std::stringsanitize(std::string&str){boost::regexre;re.imbue(std::locale("fr_FR.UTF-8"));re.assign("[^[:alpha:]]");str=boost::regex_replace(str,re,"");returnstr;}intmain(){std::stringtest="(ça)/.2424,@vatrèsbien?";cout结果是avatrsbien但我想得到çavatrèsbien。我错过了什么?

c++ - Boost 记录器追加到文件

我已经初始化了记录到文件的接收器:logging::add_file_log(keywords::file_name="sample_%N.log",/**/keywords::rotation_size=10*1024*1024,/**/keywords::time_based_rotation=sinks::file::rotation_at_time_point(0,0,0),/**/keywords::format="[%TimeStamp%]:%Message%",/**/keywords::auto_flush=true);它看起来在程序重新启动期间重写了文件。如何让它附加