在CppCon 2014 的" 烧烤委员会 "会议上,委员会成员Walter Brown提到std :: max在两个参数具有相等值的情况下返回错误的值.
这是被接受的,没有评论,也没有详细说明.这是什么意思?为什么要返回哪个值很重要?
我一直在试验Sean Parent的"C++ Seasoning"演示文稿中的代码,并将我的问题归结为以下代码:
#include <memory>
struct container {
struct concept {
virtual ~concept() {}
virtual void foo_() = 0;
};
template <class T> struct model : concept {
model (T x) : data_(x) {}
void foo_() {
foo(data_); // Line 13
}
T data_;
};
template <class T>
container(T x) : self_(new model<T>(x)) {} // Line 20
std::unique_ptr<concept> self_;
friend void foo(container &c) { c.self_->foo_(); }
};
void foo(int i) // Line 27
{
}
int main()
{
int i …
Run Code Online (Sandbox Code Playgroud) 我和一位同事正在讨论成员与非成员职能的相对优点.出现了一个问题:为什么std::map
会有find
成员函数.
我的回答是,尽管您可以std::find
在地图上使用,但您必须搜索键值对,或使用find_if和例如lambda.但是,这是线性的,并且map.find
在线性时间内提供了按键搜索.我最后断言,如果它可能是一个非成员,那么它本来就是!(虽然,std :: string表明我的概括可能有些仓促).
我的同事指出,可以采用find
与非成员函数相同的方式实现map.lower_bound
.
是否有一个理由map.find
已经制成的零件?
我正在考虑处理管道的多线程架构.我的主处理模块有一个输入队列,从中接收数据包.然后,它对这些数据包执行转换(解密等)并将它们放入输出队列.
线程来自于许多输入包可以使它们的内容彼此独立地转换.
但是,妙语是输出队列必须与输入队列具有相同的顺序(即,第一个拉出输入队列必须首先被推入输出队列,无论其转换是否先完成.)
当然,输出队列会有某种同步,所以我的问题是:确保维持这种排序的最佳方法是什么?
我试图解析以下形式的文件:
// comment bla bla
[sectionname]
key = value
key2=value2
// comment
key = value
[anothersection]
...
Run Code Online (Sandbox Code Playgroud)
使用以下代码.不幸的是,它报告最后一个eol是一个错误,尽管最后的所有eol都应该被接受:(*qi :: eol> - (sectionGrammar>*(+ qi :: eol> sectionGrammar))>*qi :: eol) ,
此外,我真的不知道如何正确解析注释而不采用下一个键值对所需的eol,这是我没有放入Skipper的原因(仅ascii :: blank).
我的最后一个问题是我不知道如何在不复制它们的情况下向boost :: ptr_vector添加节.
这是我的代码:
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_multi_pass.hpp>
#include <boost/spirit/include/classic_position_iterator.hpp> // for more detailed error information
#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/bind.hpp>
#include <boost/spirit/home/phoenix/core/argument.hpp>
#include <boost/foreach.hpp>
#include "txt.hpp"
// Only use in global namespace!
BOOST_FUSION_ADAPT_STRUCT(
wc3lib::map::Txt::Section,
(wc3lib::string, name)
(wc3lib::map::Txt::Pairs, entries)
)
namespace wc3lib
{
namespace map …
Run Code Online (Sandbox Code Playgroud)