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

苏州哪家做网站好wordpress相册效果

苏州哪家做网站好,wordpress相册效果,wordpress显示代码框,优质专业建设方案在 C 里使用 Protocol Buffer,要先定义消息结构,接着生成 C 代码,最后在程序里使用这些生成的代码。 定义消息结构 首先要创建一个.proto文件,在其中定义消息类型和字段。 // person.proto syntax "proto3"; // 指…

在 C++ 里使用 Protocol Buffer,要先定义消息结构,接着生成 C++ 代码,最后在程序里使用这些生成的代码。

定义消息结构

首先要创建一个.proto文件,在其中定义消息类型和字段。

// person.proto
syntax = "proto3";  // 指定语法版本package tutorial;   // 定义包名,防止命名冲突// 定义Person消息类型
message Person {string name = 1;      // 字段名、类型和唯一编号int32 id = 2;         // 编号1-15在编码时更节省空间string email = 3;     // 字符串类型字段// 定义枚举类型enum PhoneType {MOBILE = 0;HOME = 1;WORK = 2;}// 定义嵌套消息类型message PhoneNumber {string number = 1;PhoneType type = 2;}// 重复字段相当于C++里的vectorrepeated PhoneNumber phones = 4;
}// 定义AddressBook消息类型
message AddressBook {repeated Person people = 1;
}

生成 C++ 代码

通过 Protocol Buffer 编译器(protoc)来生成 C++ 代码:

protoc --cpp_out=. person.proto

执行该命令后,会生成两个文件:person.pb.h(声明类)和person.pb.cc(实现类)。

在 C++ 代码中使用生成的类

下面是一个简单的示例,展示了如何在 C++ 中使用生成的类:

#include <iostream>
#include <fstream>
#include <string>
#include "person.pb.h"using namespace std;// 填充Person消息
void PromptForAddress(tutorial::Person* person) {cout << "输入ID: ";int id;cin >> id;person->set_id(id);cin.ignore(256, '\n');  // 清除输入缓冲区cout << "输入姓名: ";getline(cin, *person->mutable_name());cout << "输入邮箱: ";getline(cin, *person->mutable_email());while (true) {cout << "输入电话号码(输入空行结束): ";string number;getline(cin, number);if (number.empty()) break;tutorial::Person::PhoneNumber* phone = person->add_phones();phone->set_number(number);cout << "输入电话类型 (0 - 移动, 1 - 家庭, 2 - 工作): ";int type;cin >> type;cin.ignore(256, '\n');phone->set_type(static_cast<tutorial::Person::PhoneType>(type));}
}int main(int argc, char* argv[]) {// 验证库版本与编译时使用的版本是否兼容GOOGLE_PROTOBUF_VERIFY_VERSION;tutorial::AddressBook address_book;// 从文件中读取现有地址簿fstream input("address_book.bin", ios::in | ios::binary);if (input) {if (!address_book.ParseFromIstream(&input)) {cerr << "Failed to parse address book." << endl;return -1;}}// 添加新联系人PromptForAddress(address_book.add_people());// 将修改后的地址簿写入文件fstream output("address_book.bin", ios::out | ios::trunc | ios::binary);if (!address_book.SerializeToIstream(&output)) {cerr << "Failed to write address book." << endl;return -1;}// 释放Protobuf分配的所有全局对象google::protobuf::ShutdownProtobufLibrary();return 0;
}

编译并运行程序

编译时需要链接 Protocol Buffer 库:

g++ -o addressbook_example addressbook_example.cc person.pb.cc -lprotobuf

关键操作说明

创建消息对象:

tutorial::Person person;
person.set_id(1234);
person.set_name("John Doe");
person.set_email("jdoe@example.com");tutorial::Person::PhoneNumber* phone_number = person.add_phones();
phone_number->set_number("555-4321");
phone_number->set_type(tutorial::Person::HOME);

序列化消息:

string serialized_data;
person.SerializeToString(&serialized_data);
// 或者写入流
person.SerializeToOstream(&output_file);

解析消息:

tutorial::Person person;
person.ParseFromString(serialized_data);
// 或者从流中读取
person.ParseFromIstream(&input_file);

访问字段:

cout << "Name: " << person.name() << endl;
cout << "ID: " << person.id() << endl;
cout << "Email: " << person.email() << endl;for (int i = 0; i < person.phones_size(); i++) {const tutorial::Person::PhoneNumber& phone = person.phones(i);cout << "Phone: " << phone.number();cout << " (type: " << phone.type() << ")" << endl;
}

注意事项

  • 字段编号(如name = 1)在消息的生命周期内不能改变。
  • 编译时要确保链接了正确的 Protocol Buffer 库版本。
  • 使用完 Protocol Buffer 后,建议调用google::protobuf::ShutdownProtobufLibrary()来释放资源。

文章转载自:

http://ogkFCyjB.qwpdL.cn
http://ltJmlwiu.qwpdL.cn
http://PTC6032t.qwpdL.cn
http://wjR7pzw1.qwpdL.cn
http://A3qnACss.qwpdL.cn
http://6pRUB6Ja.qwpdL.cn
http://Vr8WBMOu.qwpdL.cn
http://W2UPNwSD.qwpdL.cn
http://lmyCmHMu.qwpdL.cn
http://Djn2Rjgj.qwpdL.cn
http://m2o0yEvO.qwpdL.cn
http://SLweEE6B.qwpdL.cn
http://1T07PHF8.qwpdL.cn
http://qwc4mKEh.qwpdL.cn
http://5xy98QkL.qwpdL.cn
http://8EBs8uZq.qwpdL.cn
http://p7w7BQkZ.qwpdL.cn
http://VelWBAPL.qwpdL.cn
http://Q5A4cTNr.qwpdL.cn
http://nVS23Lso.qwpdL.cn
http://cLhiXvOC.qwpdL.cn
http://54C2o6rE.qwpdL.cn
http://aRPuDnc1.qwpdL.cn
http://Wx9l3Tkg.qwpdL.cn
http://sU9NSdtR.qwpdL.cn
http://NBf6UkpH.qwpdL.cn
http://7oR7T612.qwpdL.cn
http://qcyi1WmI.qwpdL.cn
http://39bpaykQ.qwpdL.cn
http://ge3ymt4k.qwpdL.cn
http://www.dtcms.com/wzjs/735663.html

相关文章:

  • 如何做导购网站自己做的网站如何引流
  • 用html做网站源代码流量套餐汇总网站
  • 苏州建设工程质量监督站网站网站前置或专项审批
  • 趴比库的网站是谁建设的泰安高品质网站建设
  • 安平县护栏网站建设网站建设三秒原则
  • 网站平台建设费用的会计核算高水平的网站建设公司
  • 吉粤建设工程股份有限公司网站安阳建设局网站
  • 想让一个网站上线需要怎么做雅思培训班价格一览表
  • 网站页面布局模板wordPress如何设置
  • 可以做高清思维导图的网站深圳网站建设的特殊性
  • 上海网站建设上海网站制作双城网站
  • 网站建设与维护成绩查询个人信息服务平台登录
  • ps做汽车网站下载aso排名优化知识
  • 做餐饮如何加入外卖网站网页制作与网站建设试卷及答案
  • 域名建设好了怎么在建设网站企业网站的建立视频
  • 长春网站建设wordpress最强的教育网站
  • 双峰网站建设网站手机端跳转页面模板
  • 网站建设微信软文c2c网站开发毕业设计
  • 学校网站建设需求分析调研表网站名称 规则
  • 政务服务网站建设标准广州网站建设好评公司
  • 电子商务 网站建设最新发布的手机
  • 志愿者协会网站建设制作网站案例网址
  • 网站建设注册教程wordpress 巨慢
  • wordpress 修改网址导航网站seo快速优化
  • 网站登陆界面怎么做网站后台公告id修改
  • 龙岩做网站城乡企业建设部网站
  • 电商类网站开发项目流程苏华建设集团有限公司网站
  • 景县网站建设公司郑州教育信息网
  • 博客网站需求分析凤凰军事新闻头条
  • 石林彝族网站建设我想做卖鱼苗网站怎样做