小编Don*_*aka的帖子

原始消息上的 MessageDifferencer 是否处理映射?

我必须检查我的程序(C++)的两个 protobuf 消息之间的差异。我正在尝试MessageDifferencer::CompareMessageDifferencer::Equals

map在原始消息中有一个字段,据我们所知,不能保证该字段是有序的。所以我想知道大家MessageDifferencer对此有何看法?是否有人CompareEquals职能部门可以处理此案?

我的意思是,如果映射未排序,我们如何确定第一条消息中的所有元素都与第二条消息中的正确元素进行了比较?

我的消息是这样的:

message foo
{
    // some-fields
    map<string, int64> bar = 2;
    // more-fields
}
Run Code Online (Sandbox Code Playgroud)

我对 C++ 和 protobuf 都很陌生,所以任何正确方向的想法都会有所帮助。

更新:

即使我比较相同的消息,它也显示不匹配,我可以在差异报告中看到这是因为同一字段没有相互匹配。

来自 protobuf文档

Wire format ordering and map iteration ordering of map values is undefined, so you cannot rely on your map items being in a particular order.
Run Code Online (Sandbox Code Playgroud)

c++ protocol-buffers proto

5
推荐指数
0
解决办法
235
查看次数

C++ 模板中的“typename...”语法是什么?

刚刚在 Program(C++) 文件中找到了这段代码:

template <typename blah, typename... Args>
const <some-type> bof(<some-parameters>, Args&&... args) const
{
    return breck(std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

我想知道:

  1. 后面的三个点是什么typename
  2. 直观上看起来我们可以通过这种方式传递多个参数?正在寻找一些官方术语/参考资料?

c++ typename variadic-templates

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

如何将字符串设置为可选字符串值?

由于程序(C++)中的某些限制,我遇到了将可选字符串分配给字符串变量的情况,这会出现以下错误:\nerror: no match for \xe2\x80\x98operator=\xe2\x80\x99 ...

\n

这段代码是这样的:

\n
void blah(std::experimental::optional<std::string> foo, // more parameters)\n{\n    std::string bar;\n    if(foo)\n    {\n        bar = foo; //error\n    }\n\n    // more code\n}\n
Run Code Online (Sandbox Code Playgroud)\n

尝试:

\n

我尝试使用以下方法将类型转换为匹配:

\n
bar = static_cast<std::string>(foo);\n
Run Code Online (Sandbox Code Playgroud)\n

最终显示此错误:

\n
error: no matching function for call to \xe2\x80\x98std::basic_string<char>::basic_string(std::experimental::optional<std::basic_string<char> >&)\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道:

\n
    \n
  1. 有办法处理这种情况吗?
  2. \n
  3. 或者这是一个设计限制,我必须使用其他方法而不是将可选字符串分配给普通字符串?
  4. \n
\n

c++ string stdoptional

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

std::future 用简单的话来说?

std::future我在C++编写的程序中看到了 的用法。所以,我很快去查找什么是:std::future,并得到了一个相当复杂的答案。

谁能用简单的话来形容一个6岁的孩子?我的理解力只有6岁孩子的水平……

只需一个小定义和最小的用例就可以为我工作。如果问得太多,请告诉我,我会收回我的问题。

c++ std-future

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

使用 C++ 时,函数中没有 return 语句返回非 void

我试图理解函数return中语句的 C++(GCC 编译器)期望non-void

例如,运行这段代码工作正常:

int foo() 
{ 
    throw "blah";
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我们尝试使用/调用某个函数来完成throw,它将面临众所周知的错误/警告:

no return statement in function returning non-void 
Run Code Online (Sandbox Code Playgroud)

例如:

void throw_blah() 
{
    throw "blah";
}

int foo() 
{ 
    throw_blah();
}
Run Code Online (Sandbox Code Playgroud)

我对此非常好奇,因为这与我的另一个问题之一直接相关,就像这里一样,throw工作正常,但使用macroforthrow面临同样的错误。

c++ macros return compiler-warnings

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

char* 赋值有什么作用?

我有一个 char* 并且我正在为其分配另一个 char* 。我想知道通过该指令会发生什么?

例如:

char* foo; // suppose it is initialized and defined

char* bar = foo // I am defining bar
Run Code Online (Sandbox Code Playgroud)

在调用值、内存等的赋值操作后,会发生什么(对 foo 和 bar)?

我是 C 语言的新手,对于你们中的一些人来说可能是一个非常微不足道的问题。

c char

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