gpt4 book ai didi

c++ - 从 Any 包中提取和匹配 protobuf 消息类型名的首选方法

转载 作者:行者123 更新时间:2023-11-30 04:41:35 27 4
gpt4 key购买 nike

我一直在使用 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...

如果您不寻求跨平台支持,您可以随时寻求 https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/splitpath-wsplitpath?view=vs-2019

关于c++ - 从 Any 包中提取和匹配 protobuf 消息类型名的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com