【发布时间】:2019-11-29 08:34:31
【问题描述】:
我一直在使用Any 为 protobuf 打包动态消息。
在接收端,我使用Any.type_url() 来匹配封闭的消息类型。
如果我错了,请纠正我,知道.GetDescriptor() 不能与Any 一起使用,我仍然想让匹配不那么混乱。我试图用这样的蛮力提取消息类型:
MyAny pouch;
// unpacking pouch
// Assume the message is "type.googleapis.com/MyTypeName"
....
const char* msgPrefix = "type.googleapis.com/";
auto lenPrefix = strlen(msgPrefix);
const std::string& msgURL = pouch.msg().type_url();
MamStr msgName = msgURL.substr(lenPrefix, msgURL.size());
if (msgName == "MyTypeName") {
// do stuff ...
}
但我仍然想知道是否有更简洁的方法可以跳过前缀以获取类型 URL 的“基本名称”。
谢谢!
【问题讨论】:
-
如果适合你,你可以试试
std::string getBaseName(std::string const & url) { return url.substr(url.find_last_of("/\\") + 1); }。虽然有一些情况,但它可能无法正确爆炸。假设您有两个参数作为基本名称:http://url.com/example/2这将获得最新的,即 2... 如果您不是在寻找跨平台支持,您可以随时选择 docs.microsoft.com/en-us/cpp/c-runtime-library/reference/…
标签: c++ protocol-buffers packaging