小编aby*_*s.7的帖子

将两个google :: protobuf :: Message对象相互比较的最简单方法是什么?

我想比较两个任意google::protobuf::Message对象.

我认为对象是相同的

  • 它们的描述包含具有相等字段编号和相应字段类型的字段.
  • 它们的反射具有相同的字段集(以及相同数量的重复字段)和相等的相应字段值.

我知道,我可以自己编写这样的比较函数,但可能已经有一些简单或预定义的解决方案了吗?

此外,我可能会遗漏一些关于这些对象无法比较的主要问题 - 我想知道是否是这样.

c++ comparison protocol-buffers

21
推荐指数
2
解决办法
9908
查看次数

有没有办法在声明中缩短C++ 11 lambda签名?

我想缩短以下类型的lambdas:

[] (SomeVeryLongTemplateType<int, float, char, std::string>, AnotherLongType) {};
Run Code Online (Sandbox Code Playgroud)

因为这个lambda的唯一原因是初始化一些类std::function<...>成员 - 它不捕获任何东西,它没有参数名称,它什么都不返回,它什么都不做.

如果缩短操作表示为签名中参数数量的函数,那么我希望此函数具有复杂度O(1).

有没有办法做到这一点?

c++ lambda syntactic-sugar c++11

21
推荐指数
2
解决办法
1152
查看次数

为什么就地成员初始化在C++ 11中使用复制构造函数?

我对以下代码有点困惑:

struct A {
  std::atomic<int> a = 0;
};
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误:

复制"std :: atomic"类型的成员子对象调用已删除的构造函数

但几乎相同的代码确实有效:

struct A {
  std::atomic<int> a = {0};
};
Run Code Online (Sandbox Code Playgroud)

Okey,如果第一个变体需要复制构造函数,那么它必须使用operator=().可是等等!这个运算符完美地工作,没有复制构造函数:

A a;
a.a = 1;
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释如何在简单操作方面扩展两个就地初始化吗?为什么第一个需要复制构造函数?

c++ initialization atomic copy-constructor c++11

19
推荐指数
2
解决办法
7525
查看次数

为什么我不能在C++ 14中移动lambda中的std :: unique_ptr?

我想在lambda中传递一个原始指针,但我不希望它被泄露,如果没有调用lambda.它看起来像这样:

void Clean(std::unique_ptr<int>&& list);

void f(int* list) {
  thread_pool.Push([list = std::unique_ptr<int>(list) ] {
    Clean(std::move(list));  // <-- here is an error.
  });
}
Run Code Online (Sandbox Code Playgroud)

我在Clang 3.7.0中收到错误:

错误:将类型'unique_ptr <[2*...]>'的引用绑定到类型'unique_ptr <[2*...]>'的值会丢弃限定符

但是我没有看到任何限定词,尤其是掉线.

另外,我在邮件列表上找到了类似的报告,但没有回答.


我应该如何修改我的代码,以便编译并按语义按预期工作?

c++ lambda move-semantics c++14

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

如何将"指针指针类型"转换为const?

使用以下代码

void TestF(const double ** testv){;}
void callTest(){
    double** test;
    TestF(test);
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

'TestF' : cannot convert parameter 1 from 'double **' to 'const double **'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.为什么test不能默默地投入const double**?我为什么要明确地这样做?我知道

TestF(const_cast<const double**>(test)) 
Run Code Online (Sandbox Code Playgroud)

使我的代码正确,但我觉得这应该是不必要的.

是否有一些关于const的关键概念我不知道了?

c++ const const-cast

17
推荐指数
2
解决办法
2458
查看次数

Clang链接时优化在Fedora 18上无法正常工作

我是铿锵的新手,所以我可能会做些傻事.但我花了几个小时寻找解决方案,包括在这里搜索,我没有找到问题解决-flto与发行版提供的软件包.这个描述的细节是特定于Fedora 18的,但我在Ubuntu 13.04上遇到了类似的问题,所以这个问题并不是特定于Fedora.这是我或铿锵.

问题:我正在尝试编译一个简单的hello-world程序,clang++ -flto以获得链接时优化的好处.没有-flto它工作正常.使用-flto无法链接.调用clang -flto -o hello hello.o -v以查看完整的链接器命令行,我得到:

$ clang++ -flto -o hello hello.o -v
clang version 3.2 (tags/RELEASE_32/final)
Target: x86_64-redhat-linux-gnu
Thread model: posix
 "/usr/bin/ld" --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/4.7.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../.. -L/lib -L/usr/lib -plugin /usr/bin/../lib/LLVMgold.so hello.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtend.o /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crtn.o
/usr/bin/ld: /usr/bin/../lib/LLVMgold.so: error loading plugin
/usr/bin/ld: /usr/bin/../lib/LLVMgold.so: error in plugin cleanup (ignored)
clang: error: linker command failed with exit code …
Run Code Online (Sandbox Code Playgroud)

linker fedora clang clang++ lto

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

如何推送'refs/replace'而不在git中推送任何其他引用?

我用这种方式用另一个提交替换了一个提交:

* HEAD
|
...
|
* ==> *  `git replace left_commit right_commit`
|     |
*-----/
|
...
Run Code Online (Sandbox Code Playgroud)

这个替换放在.git/refs/replace文件夹中,所以我想知道 - 如何将这个refs推送到远程端?

git

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

为什么variadic函数不能"吃掉"C++ 11中的list-initialization参数?

示例代码是:

#include <unordered_map>

int main() {
    std::unordered_map<int, std::pair<int, int>> map;

    map.emplace(1, {1, 1});

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪里emplace()有签名,如:

template <class... _Args>
pair<iterator, bool> emplace(_Args&&... __args);
Run Code Online (Sandbox Code Playgroud)

gcc说的功能expectes 0参数- 2提供的.该clang说,函数需要1个参数- 2提供的.

我甚至不明白 - 这段代码有什么问题?

c++ variadic-functions compiler-bug c++11 list-initialization

14
推荐指数
2
解决办法
506
查看次数

使用模块中__init__.py中定义的方法

假设我有以下目录结构:

lib\
--__init__.py
--foo.py
--bar.py
Run Code Online (Sandbox Code Playgroud)

在foo和bar里面,有两种方法都需要相同的方法.例如:

FOO:

def method1():
    win()
Run Code Online (Sandbox Code Playgroud)

酒吧:

def method2(number):
    if number < 0:
        lose()
    else:
        win()
Run Code Online (Sandbox Code Playgroud)

init:

def win():
    print "You Win!"

def lose():
    print "You Lose...."
Run Code Online (Sandbox Code Playgroud)

有没有办法在模块各自的子文件中使用init .py中的win和lose方法,或者我是否必须在文件夹中创建另一个文件并将foo和bar导入?

python

13
推荐指数
2
解决办法
9262
查看次数

在Linux上测试网络代码的最准确方法是什么?

我想用单元测试来覆盖我的代码.这是好事.但我有一个问题 - 我有一个网络代码.该代码确实从主机名解析IPv4和IPv6地址,绑定到接口,侦听,连接等.

我假设存在一些可以部署在几乎任何工作站或某些编程技术上的C/C++测试框架,它允许我:

  • 使用IPv4和IPv6地址设置和拆除自定义网络接口
  • 模拟不同的干扰行为,如丢包,超时,连接丢失等.
  • 将主机名绑定到接口并解析它们.

主要目标不是与机器上的真实网络接口进行交互或混乱.


你有什么建议吗?

c c++ linux unit-testing network-programming

12
推荐指数
2
解决办法
872
查看次数