我必须检查我的程序(C++)的两个 protobuf 消息之间的差异。我正在尝试MessageDifferencer::Compare和MessageDifferencer::Equals。
我map在原始消息中有一个字段,据我们所知,不能保证该字段是有序的。所以我想知道大家MessageDifferencer对此有何看法?是否有人Compare或Equals职能部门可以处理此案?
我的意思是,如果映射未排序,我们如何确定第一条消息中的所有元素都与第二条消息中的正确元素进行了比较?
我的消息是这样的:
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) 刚刚在 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)
我想知道:
typename?由于程序(C++)中的某些限制,我遇到了将可选字符串分配给字符串变量的情况,这会出现以下错误:\nerror: no match for \xe2\x80\x98operator=\xe2\x80\x99 ...
这段代码是这样的:
\nvoid 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}\nRun Code Online (Sandbox Code Playgroud)\n尝试:
\n我尝试使用以下方法将类型转换为匹配:
\nbar = static_cast<std::string>(foo);\nRun Code Online (Sandbox Code Playgroud)\n最终显示此错误:
\nerror: no matching function for call to \xe2\x80\x98std::basic_string<char>::basic_string(std::experimental::optional<std::basic_string<char> >&)\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n我想知道:
\nstd::future我在C++编写的程序中看到了 的用法。所以,我很快去查找什么是:std::future,并得到了一个相当复杂的答案。
谁能用简单的话来形容一个6岁的孩子?我的理解力只有6岁孩子的水平……
只需一个小定义和最小的用例就可以为我工作。如果问得太多,请告诉我,我会收回我的问题。
我试图理解函数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面临同样的错误。
我有一个 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++ ×5
c ×1
char ×1
macros ×1
proto ×1
return ×1
std-future ×1
stdoptional ×1
string ×1
typename ×1