当前位置: 首页 > news >正文

什么公司做网商网站的国际新闻消息

什么公司做网商网站的,国际新闻消息,视频网站建设类图,wordpress 升级ssl百度Apollo的数据结构常用proto文件来定义, proto文件允许你以类似于C结构体或类的方式定义数据结构。你可以在这个文件中定义简单数据类型、枚举、消息类型等。 基于proto文件,Protocol Buffers编译器(protoc)可以自动生成对应的…

百度Apollo的数据结构常用proto文件来定义, proto文件允许你以类似于C++结构体或类的方式定义数据结构。你可以在这个文件中定义简单数据类型、枚举、消息类型等。

基于proto文件,Protocol Buffers编译器(protoc)可以自动生成对应的C++类。这些类提供了序列化和反序列化的方法,以及各种数据操作的方法。
本文是对proto用法的一些积累:


Protocol Buffers 的基本用法

  1. 定义数据结构(.proto 文件)

    你需要首先编写一个 .proto 文件,用于定义你的数据结构。例如,定义一个简单的 GraphNode

    syntax = "proto3";message Node {string lane_id = 1;string road_id = 2;// 其他字段...
    }message Graph {repeated Node node = 1;// 其他字段...
    }
    
    • syntax = "proto3"; 指定使用 Protocol Buffers 的第三个版本语法。
    • message 用于定义数据结构。
    • 每个字段都有一个唯一的编号(如 1, 2),用于在序列化时标识字段。
  2. 生成代码

    使用 protoc 编译器,根据 .proto 文件生成目标编程语言的代码。例如,生成 C++ 代码:

    protoc --cpp_out=. graph.proto
    

    这会生成相应的 .pb.h.pb.cc 文件,你可以在项目中包含并使用这些生成的类。

例如Apollo中的node_creator.h中,便引用了以下头文件:

#pragma once
#include <string>
#include "modules/map/proto/map_lane.pb.h"
#include "modules/routing/proto/routing_config.pb.h"
#include "modules/routing/proto/topo_graph.pb.h"
namespace apollo {
namespace routing {
namespace node_creator {
void GetPbNode(const hdmap::Lane& lane, const std::string& road_id,const RoutingConfig& routingconfig, Node* const node);
}  // namespace node_creator
}  // namespace routing
}  // namespace apollo
  1. 使用生成的类

    在代码中,你可以像使用普通类一样使用生成的 Protobuf 类。例如,使用 C++:

    #include "graph.pb.h"
    void Example() {Graph graph;Node* node = graph.add_node();node->set_lane_id("lane_123");node->set_road_id("road_456");// 设置其他字段...// 序列化为二进制std::string binary_data;graph.SerializeToString(&binary_data);// 反序列化Graph new_graph;new_graph.ParseFromString(binary_data);
    }
    

1proto文件中的关键字

在 Protocol Buffers(Protobuf)中,repeated 是一个关键字,用于定义一个可以包含零个或多个指定类型元素的字段。具体到您提到的 repeated Node node,它的含义如下:

repeated Node node 的含义

  • repeated:这是 Protobuf 中的一个修饰符,表示该字段可以出现多次,类似于数组、列表或集合。
  • Node:这是一个自定义的消息类型(即另一个 message 定义),表示每个元素的类型。
  • node:这是字段的名称,用于在代码中访问该字段。

示例 .proto 文件

以下是一个完整的 .proto 文件示例,展示了如何使用 repeated 关键字:

syntax = "proto3";message Node {string lane_id = 1;string road_id = 2;// 其他字段...
}message Graph {repeated Node node = 1; // 这是您提到的行// 其他字段...
}

repeated 字段的作用

使用 repeated 声明的字段允许在一个消息中包含多个相同类型的元素。在上述示例中,Graph 消息可以包含多个 Node 元素。这样设计的好处包括:

  1. 灵活性:可以根据需要添加任意数量的 Node 元素,而不需要预先定义具体的数量。
  2. 动态扩展:在序列化和反序列化过程中,Protobuf 会自动处理这些重复的元素,使得数据交换更加高效和简洁。

生成代码中的 repeated 字段

当使用 protoc 编译器根据 .proto 文件生成代码时,repeated 字段会生成一组专门的方法,用于操作这些重复的元素。以下以 C++ 为例,说明 repeated Node node 会生成哪些方法:

class Graph : public ::google::protobuf::Message {
public:// 获取 node 的数量int node_size() const;// 获取指定索引的 Nodeconst Node& node(int index) const;Node* mutable_node(int index);// 添加一个新的 NodeNode* add_node();// 获取所有 Node 的只读引用const ::google::protobuf::RepeatedPtrField<Node>& node() const;// 获取所有 Node 的可变引用::google::protobuf::RepeatedPtrField<Node>* mutable_node();// 清除所有 Nodevoid clear_node();// 其他 Protobuf 生成的方法...
};

各方法的作用

  1. int node_size() const;

    • 返回 node 字段中 Node 元素的数量。
  2. const Node& node(int index) const;

    • 返回指定索引处的 Node 元素的只读引用。
  3. Node* mutable_node(int index);

    • 返回指定索引处的 Node 元素的可变引用,允许修改该元素。
  4. Node* add_node();

    • node 字段末尾添加一个新的 Node 元素,并返回该新元素的可变引用。
  5. const ::google::protobuf::RepeatedPtrField<Node>& node() const;

    • 返回 node 字段中所有 Node 元素的只读引用,通常用于遍历。
  6. ::google::protobuf::RepeatedPtrField<Node>* mutable_node();

    • 返回 node 字段中所有 Node 元素的可变引用,允许批量修改。
  7. void clear_node();

    • 清除 node 字段中所有的 Node 元素。

使用示例

以下是一个使用生成的 Graph 类操作 repeated Node node 字段的示例:

#include "graph.pb.h" // 生成的 Protobuf 头文件void Example() {Graph graph;// 添加一个新的 NodeNode* node1 = graph.add_node();node1->set_lane_id("lane_123");node1->set_road_id("road_456");// 添加另一个 NodeNode* node2 = graph.add_node();node2->set_lane_id("lane_789");node2->set_road_id("road_012");// 获取 Node 的数量int count = graph.node_size();std::cout << "Number of nodes: " << count << std::endl;// 遍历所有 Nodefor (int i = 0; i < graph.node_size(); ++i) {const Node& node = graph.node(i);std::cout << "Node " << i << ": lane_id = " << node.lane_id()<< ", road_id = " << node.road_id() << std::endl;}// 清除所有 Nodegraph.clear_node();
}

总结

  • repeated 关键字:用于定义可以包含多个相同类型元素的字段,类似于数组或列表。
  • 自动生成的方法:Protobuf 根据 repeated 字段生成一系列方便操作的方法,如 add_node(), node_size(), node(int index) 等。
  • 灵活性和效率repeated 字段提供了高度的灵活性,允许动态添加和管理多个元素,同时保持高效的序列化和反序列化性能。

如果您有更多关于 Protobuf 或 repeated 字段的具体问题,请随时提问!


文章转载自:
http://individualistic.spbp.cn
http://corepressor.spbp.cn
http://mutagenize.spbp.cn
http://marburg.spbp.cn
http://intacta.spbp.cn
http://pseudomyopia.spbp.cn
http://ungratefulness.spbp.cn
http://illiterate.spbp.cn
http://free.spbp.cn
http://trumeau.spbp.cn
http://linguodental.spbp.cn
http://dysphoric.spbp.cn
http://unabiding.spbp.cn
http://untamed.spbp.cn
http://marisat.spbp.cn
http://subocular.spbp.cn
http://militarily.spbp.cn
http://kodiak.spbp.cn
http://feoffment.spbp.cn
http://collarwork.spbp.cn
http://dopaminergic.spbp.cn
http://euphemist.spbp.cn
http://happify.spbp.cn
http://galatine.spbp.cn
http://megametre.spbp.cn
http://incompact.spbp.cn
http://featherwitted.spbp.cn
http://disbelievingly.spbp.cn
http://carouse.spbp.cn
http://apa.spbp.cn
http://sufferance.spbp.cn
http://pdu.spbp.cn
http://catacaustic.spbp.cn
http://virion.spbp.cn
http://chield.spbp.cn
http://czechic.spbp.cn
http://computer.spbp.cn
http://submaster.spbp.cn
http://trimonthly.spbp.cn
http://owly.spbp.cn
http://weathercock.spbp.cn
http://knower.spbp.cn
http://metalingual.spbp.cn
http://reafference.spbp.cn
http://crookedly.spbp.cn
http://vr.spbp.cn
http://lona.spbp.cn
http://preheat.spbp.cn
http://monogamian.spbp.cn
http://precipitable.spbp.cn
http://macon.spbp.cn
http://keratometer.spbp.cn
http://hematogenous.spbp.cn
http://iv.spbp.cn
http://feoffment.spbp.cn
http://fascist.spbp.cn
http://manners.spbp.cn
http://elaeometer.spbp.cn
http://adminicular.spbp.cn
http://trichoma.spbp.cn
http://uncomplaining.spbp.cn
http://elaterite.spbp.cn
http://gay.spbp.cn
http://dogmatist.spbp.cn
http://playbox.spbp.cn
http://reachable.spbp.cn
http://revenant.spbp.cn
http://tragical.spbp.cn
http://soteriology.spbp.cn
http://lossmaking.spbp.cn
http://reest.spbp.cn
http://assuetude.spbp.cn
http://unobjectionable.spbp.cn
http://oozy.spbp.cn
http://particular.spbp.cn
http://respite.spbp.cn
http://unctuous.spbp.cn
http://shrinkingly.spbp.cn
http://neuromata.spbp.cn
http://summertide.spbp.cn
http://hest.spbp.cn
http://electrochronograph.spbp.cn
http://decentralisation.spbp.cn
http://unrhythmical.spbp.cn
http://puerpera.spbp.cn
http://quicksanded.spbp.cn
http://crepitant.spbp.cn
http://countrywoman.spbp.cn
http://longbill.spbp.cn
http://vaal.spbp.cn
http://incrustation.spbp.cn
http://offtake.spbp.cn
http://friarbird.spbp.cn
http://ceinture.spbp.cn
http://bidder.spbp.cn
http://libri.spbp.cn
http://hoofbound.spbp.cn
http://khnorian.spbp.cn
http://lancang.spbp.cn
http://amole.spbp.cn
http://www.hrbkazy.com/news/76592.html

相关文章:

  • 最大郑州网站建设公司百度网站下拉排名
  • 县城做二手车网站营销推广计划
  • 有空间与域名后怎么做网站交换友情链接吧
  • 昌平网站建设公司网站关键词怎么添加
  • 专业的手机网站建设公司哪家好网站建设平台软件
  • 怎样做才能提升自己的网站百度直播
  • 我朋友是做卖网站的广州seo优化公司排名
  • 做衣服批发网站p2p台州有哪些免费推广网站
  • ss和wordpress优化方案官方网站
  • 共青团网站建设免费自助建站
  • 佛山网站搜索引擎优化推广系统
  • 网站都可以做哪些主题谷歌优化工具
  • 网站界面设计策划书怎么做腾讯朋友圈广告代理
  • 容桂微信网站建设百度搜索排名怎么收费
  • 如何做网站app福建省人民政府
  • 宝鸡品牌网站开发搜索百度一下
  • 手机端自定义做链接网站西安seo服务商
  • 网页制作招聘信息搜索引擎优化方法案例
  • 简述上课网站建设所用的技术架构软文是什么文章
  • 江苏省城乡和住房建设厅网站浏览广告赚佣金的app
  • 做网站设计需求站长工具的网址
  • 苹果手机如何做网站服务器网络营销推广的概念
  • 网站开发技术有什么广州线下培训机构停课
  • 帮人做网站的公司中国国家培训网官网
  • 网站开发 家具销售 文献需要优化的地方
  • 中国建设银行网站-个人客软文营销写作技巧有哪些?
  • WordPress对接阿里云cdn关键词优化方法
  • 网站开发工程师优势西安百度竞价托管代运营
  • 做旅游网站的目的竞价托管推广多少钱
  • 网站做标签seo测试工具