小编Kaz*_*gon的帖子

为什么std :: max返回错误的值?

在CppCon 2014 的" 烧烤委员会 "会议上,委员会成员Walter Brown提到std :: max在两个参数具有相等值的情况下返回错误的值.

这是被接受的,没有评论,也没有详细说明.这是什么意思?为什么要返回哪个值很重要?

c++

33
推荐指数
1
解决办法
2276
查看次数

Clang在模板上下文中的函数定义之后找不到实例化的函数

我一直在试验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)

c++ clang

5
推荐指数
1
解决办法
2559
查看次数

为什么std :: map有一个find成员函数?

我和一位同事正在讨论成员与非成员职能的相对优点.出现了一个问题:为什么std::map会有find成员函数.

我的回答是,尽管您可以std::find在地图上使用,但您必须搜索键值对,或使用find_if和例如lambda.但是,这是线性的,并且map.find在线性时间内提供了按键搜索.我最后断言,如果它可能是一个非成员,那么它本来就是!(虽然,std :: string表明我的概括可能有些仓促).

我的同事指出,可以采用find与非成员函数相同的方式实现map.lower_bound.

是否有一个理由map.find已经制成的零件?

c++ stl stdmap

5
推荐指数
1
解决办法
240
查看次数

在多线程管道中维护订单

我正在考虑处理管道的多线程架构.我的主处理模块有一个输入队列,从中接收数据包.然后,它对这些数据包执行转换(解密等)并将它们放入输出队列.

线程来自于许多输入包可以使它们的内容彼此独立地转换.

但是,妙语是输出队列必须与输入队列具有相同的顺序(即,第一个拉出输入队列必须首先被推入输出队列,无论其转换是否先完成.)

当然,输出队列会有某种同步,所以我的问题是:确保维持这种排序的最佳方法是什么?

multithreading

4
推荐指数
2
解决办法
5418
查看次数

提升精神语法eol

我试图解析以下形式的文件:

// 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)

c++ parsing boost boost-spirit boost-spirit-qi

1
推荐指数
1
解决办法
1228
查看次数