小编Has*_*yed的帖子

有人做过boost :: asio的性能分析吗?

我需要类似套接字的本地IPC.我在Windows上使用了命名管道和重叠IO,我想将应用程序重写为boost :: ASIO,以便它也可以使用UNIX域套接字.

我最近审查了libevent库的部分内容,我知道它只支持1.4版本中的socket()和select().由于重叠的IO是非常有效的,因此将其排除显然是一个不可接受的特性,它在版本2(在alpha中)中得到了解决.次优执行的另一个例子是使用的红黑树与PRIO队列为其超时逻辑不客气沿线某处.

有没有人对boost vs libevent/libev的性能特征有任何意见.它在某些平台上是否有任何明显的不良特征?我对这个问题的目标是,除非我绝对必须,否则我不想对ASIO库进行操作.我想知道boost :: asio是否以最佳方式使用最优的OS原语.

performance benchmarking networking asynchronous boost-asio

15
推荐指数
2
解决办法
1万
查看次数

在C++中从fstream获取有意义的错误消息

从std :: fstreams以可移植的方式获取有意义的文件访问错误消息的最佳方法是什么?原始性badbits并且failbits变得有点烦人.我之前已经针对win32和POSIX编写了自己的异常层次结构,这比STL的方式灵活得多.

我将"basic :: ios_clear"作为一个错误消息从一个 已启用异常what的downcasted catch(std::exception)方法中获取fstream.这对我来说意义不大,虽然我知道问题是什么,但我希望我的程序能够提供更多信息,这样当我几个月后开始部署时,我的生活会更容易.

Boost中有什么东西可以从fstream实现跨平台中提取有意义的消息并跨越STL实现吗?

c++ portability defensive-programming stl exception

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

cmake:汇编统计

我需要弄清楚哪些翻译单元需要重组以改善编译时间,如何使用cmake来控制编译时间?

c++ compilation cmake build-tools

14
推荐指数
3
解决办法
5580
查看次数

停止 go mod 工具解析某些目录

我正在使用 mono 存储库,并在项目树 (istio) 下下载某些工具。运行go get -uorgo mod tidy会导致 maingo.mod被不相关的 deps 更新。

如何排除某些 src 子路径以供考虑。

笔记:

这并不能解决问题,因为我想要排除的子目录中确实有 go 文件。

module go go-modules

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

boost :: spirit组成语法的语法

我已经想出如何使用精神 - 也就是说,我写了一个中等复杂的语法.我总是采用增长程序的方法 - 一次一个子系统.我已经为复杂模型编写了数据结构,该模型在最高级别有4种类型.

我想使用由规则方法组成语法一次解析一个类型的顶级类型 - 即,我想用一个顶级语法编​​写4个语法.如果这是可能的(我开始怀疑),有人可以发布片段或对这样做的项目的引用.

一个顶级语法具有50+(可能更多)规则(用于正确的错误处理)听起来不是很有趣(TMP代码易失/慢编译,并提供无用的错误消息).

c++ parsing recursive-descent boost-spirit tmp

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

确定性地生成加密安全密钥和IVEC

背景

我正在设计一个系统,该系统能够为静态Web内容的用户开发动态认证方案.其动机是预先生成大量复杂的生成但敏感的Web内容,然后通过基于cookie(嵌入可逆加密信息)的身份验证进行静态服务,由Web服务器强制执行.使用AEAD模式加密原语.

问题

我需要生成一段时间有效的IVEC和密钥,比如一周(当前有效对).并且过去的IVEC /密钥也有效期为2周(历史上有效),并且使用历史有效秘密加密的任何数据将仅使用当前有效的IVEC/KEY重新加密.

我需要的是一个确定性的CSPRNG,即随机数和密码短语的种子,它可以以索引方式产生64位或128位数字块.如果我使用一周以来 - "1970年1月1日"作为我假设的CSPRNG的索引元素之一,我应该能够构建一个随着时间的推移自动更改密钥的系统.

我正在考虑的方法

现在我没有在cryptopp中看到这样的功能,或者我现在已经足够了解术语,并且由于cryptopp是最先进的加密库,我没有信心我会找到另一个.所以,如果我找不到实现,我应该自己动手.是否会从连接数据中生成静态字符串结构然后对其进行散列(如下所示)?

RIPEMD160(RandomPreGeneratedFixedNonce:密码短语:UInt64SinceEpoch:128BitBlockIndexNumber);

注意:块编号将被分配并具有常规结构,因此例如对于128位摘要,块0的前64位将用于ivec,而所有元素1用于128位密钥.

这是一种合理的方法( - .,加密安全)吗?

- 编辑:发表接受评论 -

经过一些反思后,我决定将我最初认为密码和nonce/salt的内容合并为一个16字节(加密强)密钥,并使用PKCS#5中概述的技术来导出多个基于时间的密钥.不需要盐,因为不使用密码短语.

c++ hash cryptography crypto++ secret-key

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

模板类的模板成员函数的类外定义的语法

template<typename A, typename B>
class mindF_ck
{
    template<typename C>
    inline bool ouch(C & c_in);    
};
Run Code Online (Sandbox Code Playgroud)

如何为ouch课外定义签名?我向我的大脑发送一个查询,但它一直是空白的;)

c++ syntax

11
推荐指数
2
解决办法
2252
查看次数

通过自由函数或成员函数扩展的机制

包含标准的大量C++库允许您调整对象以便在库中使用.选择通常在成员函数或同一名称空间中的自由函数之间.

我想知道函数和构造库代码用于调用一个调用这个"扩展"函数之一的调用,我知道这个决定必须在编译期间进行,并涉及模板.以下运行时伪代码不可能/无意义,原因超出了本问题的范围.

if Class A has member function with signature FunctionSignature
    choose &A.functionSignature(...)
else if NamespaceOfClassA has free function freeFunctionSignature
    choose freeFunctionSignature(...)
else
    throw "no valid extension function was provided"
Run Code Online (Sandbox Code Playgroud)

上面的代码看起来像运行时代码:/.那么,库如何找出一个类所在的命名空间,它如何检测这三个条件,还有哪些需要避免的陷阱.

我的问题的动机是让我能够在库中找到调度块,并能够在我自己的代码中使用这些构造.所以,详细的答案将有所帮助.

!!赢得胜利!

好的,根据Steve(和评论)的答案,ADL和SFINAE是在编译时连接调度的关键结构.我的头部是ADL(原始)和SFINAE(再次是粗鲁的).但我不知道他们是如何以我认为应该的方式共同组织的.

我想看一个如何将这两个结构组合在一起的说明性示例,以便库可以在编译时选择是在对象中调用用户提供的成员函数,还是在同一对象的命名空间中提供的用户提供的自由函数.这应该只使用上面的两个构造来完成,没有任何类型的运行时分派.

让我们说有问题的对象被调用NS::Car,并且这个对象需要提供MoveForward(int units)作为c的成员函数的行为.如果要从对象的命名空间中拾取行为,它可能看起来像MoveForward(const Car & car_, int units).让我们定义想要分派的函数mover(NS::direction d, const NS::vehicle & v_),其中direction是一个枚举,而v_是一个基类NS::car.

c++ oop templates library-design compile-time

10
推荐指数
2
解决办法
496
查看次数

c ++引用兄弟命名空间

给定:

namespace root { namespace parent { namespace childa
    class hard_to_get_at{};
}}}

namespace root { namespace parent { namespace childb
    // how do I refer refer to namespace childb relative to the current namespace ?
    ..::hard_to_get_at instance_of_childa_class; // psuedo syntax
}}}
Run Code Online (Sandbox Code Playgroud)

我是否需要指定命名空间的完整路径?它有什么办法吗?

c++ namespaces

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

任何快速跳转到编程文档的好工具

以下粗体问题.这是一个编程问题,所以不要妄下结论并投票结束.

我是一名C++程序员.我使用OS X/quicksilver或ubuntu/compiz/gnome作为我的桌面.我尽量不要触摸鼠标,我使用多个桌面,我使用平铺这两个我从键盘驱动器.对于编程我使用bash和vim.

由于我是一名C++程序员,我需要引用遍布各地的文档,例如STL/Boost/CMAKE/zeromq/protocol buffers/Mongodb/rapidJson/luajit,列表继续.

跳转到各种参考手册是一个实时下沉/思维过程破坏者.也许你不相信这确实是一个问题,但是如果你使用boost中的多个库,而没有代码完成,你会发现这确实是一个问题. 人们如何管理他们的参考手册链接以及跳转到参考手册的最快方法是什么?标准的浏览器书签不是答案,无论您的建议应该以尽可能少的击键次数完成,或者从信息需要合成到信息的最低延迟需要满足.

也许是自定义浏览器,还是我不知道的强大插件?对于目录导航,我使用vim的NERDTree,或许沿着这些行?例如,我应该能够输入boost-filesystem并能够直接跳转到boost-filesystem的代码参考页面.

c++ vim coding-style reference-manual code-navigation

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