如何解决如何在C ++中使用字段编号访问Protobuf中的字段值
假设存在这种情况,
message A {
...
}
message C {
optional A a_in_c = 1;
}
message D {
optional A a_in_d = 1;
}
Need to write a template function,template<typename T>
void foo (T t) {
// here T can be C or D. and need to access first field.
// A a = first field of t.
}
该怎么做?我知道如何使用数字获取字段描述符,但无法获取其值。
解决方法
因此,就结构而言,以下方法将起作用:
#include <iostream>
#include <string>
struct A {
int x;
double y;
};
struct C {
A a_in_c{1};
};
struct D {
A a_in_d{2};
};
template<typename T>
void foo (T t) {
auto a = reinterpret_cast<A*>(&t);
std::cout << a->x << "!\n";
}
int main()
{
std::string name;
D d;
foo(d);
}
但是请记住,只要在一台计算机上完成序列化和反序列化,它就可以正常工作,但是一旦在计算机之间进行通信,它就会变得棘手(必须考虑字节顺序,或更普遍地说语音存储布局)。此外,仅当A
或C
结构中的第一个字段为D
时,以下代码才有效。
从设计的角度来看,将字段命名为相同的名称更为明智,因为这有点儿破坏了模板的用途,并且像这样使用T t
进行鸭子输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。