涓鐐瑰皬鐗㈤獨 cppblog鍜屽崥瀹㈠洯鏄暐鍏崇郴鍛紵鍚屼袱杈圭殑浜轟氦嫻佷氦嫻?闅鵑亾鎴戜袱杈歸兘瑕佸彂涓閬嶏紵
C++涓璸rotobuf鏄釜甯哥敤鐨勫簭鍒楀寲搴擄紝緗戠粶娑堟伅鍙戦侊紝娑堟伅瑙f瀽閮藉崄鍒嗘柟渚匡紝xml鍙互騫茬殑錛屽畠閮借兘騫層備絾鏄畠緇濅笉浠呬粎鏄簭鍒楀寲搴撱?/span>
綆鍗曠殑璇達紝protobuf緇機++澧炲姞浜咰# attribute鐨勫姛鑳姐侰++浠庢灝辨湁浜嗗厓鏁版嵁浜嗭紒浼歝#鐨勫悓瀛﹁偗瀹氭槑鐧戒簡榪欏彞璇濈殑鎰忎箟浜嗐?/span>
涓. protobuf鐢ㄤ綔閰嶇疆鏂囦歡錛?/span>
protobuf鎻愪緵浜嗕竴縐峵extformat鐨勫簭鍒楀寲鏍煎紡錛岀被浼糺son鏍煎紡錛屾竻鏅版槗璇匯傛瘮濡備竴媯佃涓烘爲鑺傜偣鎻忚堪鏂囦歡錛?/span>
鏁版嵁瀹氫箟涓猴細
message BehaviorNodeConf
{
required int32 type = 1;
// 鏉′歡闇瑕佺殑鍙傛暟
repeated int32 args = 2;
// 鍖呭惈澶氫釜瀛愯妭鐐?/span>
repeated BehaviorNodeConf node = 3;
};
message BehaviorTreeConf
{
// 琛屼負鏍戠被鍨? AI, ON_HIT, ON_HITTED ...
required int32 type = 1;
// 琛屼負鏍戣妭鐐?/span>
required BehaviorNodeConf node = 2;
};閰嶇疆鏂囦歡涓猴細
type: 5
node:
{
type: 1
node:
{
type: 101
args: 2
}
node:
{
type: 1
node:
{
type: 1001
args: 0
args: 100
}
node:
{
type: 1001
args: 1
args: -100
}
}
} 浠ヤ笅涓よ浠g爜鍗沖彲瑙f瀽榪欎釜閰嶇疆鏂囦歡錛欱ehaviorTreeConf conf;
google::protobuf::TextFormat::ParseFromString(fileContent, &conf);浜? protobuf鐨勫弽灝勭敤娉?/span>
寰堝浜洪兘璇碈++寰堥毦鍋歄rm錛屽洜涓烘病鏈夊弽灝勭瓑絳夛紝鏈変簡protobuf榪欎竴鍒囬兘涓嶆槸闂浜嗭紝濡備笅錛?/span>
select鎿嶄綔錛氳嚜鍔ㄧ敓鎴恠elect璇彞錛屾煡璇竴鏉¤褰曟妸瀹冧繚瀛樺埌person鍙橀噺閲岄潰
try
{
DbHelper dbHelper("tcp://127.0.0.1:3306", "root", "111111");
DbResultPtr result = dbHelper.Execute(
Select<Person>(Column("*")).
Where(Column("age") > 10)
);
auto person = boost::make_shared<Person>();
result->One(person);
ASSERT_EQ(26, person->age());
}
catch (const Exception& e)
{
} update鎿嶄綔: 鑷姩鐢熸垚update璇彞錛岃繖孌典唬鐮佹槸浠庢垜鐨勫崟鍏冩祴璇曢噷闈㈡姞鍑烘潵鐨勶紝澶у鏄庣櫧鎰忔濆氨琛屼簡TEST_F(UpdateTest, Update_Where)
{
std::string expectedSql;
expectedSql =
"update Egametang.Person "
"set guid = 1, age = 18, comment = 'a good student!' "
"where age > 10";
Person person;
person.set_guid(1);
person.set_age(18);
person.set_comment("a good student!");
Update update(person);
update.Where(Column("age") > 10);
EXPECT_EQ(expectedSql, update.ToString());
} 涓?protbuf 綾諱技c# attribute鍔熻兘
鐪嬪涓嬩竴孌祊rotobuf瀹氫箟錛歩mport "google/protobuf/descriptor.proto";
extend google.protobuf.FileOptions
{
optional string my_file_option = 50000;
}
extend google.protobuf.MessageOptions
{
optional int32 my_message_option = 50001;
}
extend google.protobuf.FieldOptions
{
optional float my_field_option = 50002;
}
extend google.protobuf.EnumOptions
{
optional bool my_enum_option = 50003;
}
extend google.protobuf.EnumValueOptions
{
optional uint32 my_enum_value_option = 50004;
}
extend google.protobuf.ServiceOptions
{
optional MyEnum my_service_option = 50005;
}
extend google.protobuf.MethodOptions
{
optional MyMessage my_method_option = 50006;
}
option (my_file_option) = "Hello world!";
message MyMessage
{
option (my_message_option) = 1234;
optional int32 foo = 1 [(my_field_option) = 4.5];
optional string bar = 2;
}
enum MyEnum
{
option (my_enum_option) = true;
FOO = 1 [(my_enum_value_option) = 321];
BAR = 2;
}
message RequestType {}
message ResponseType {}
service MyService
{
option (my_service_option) = FOO;
rpc MyMethod(RequestType) returns(ResponseType)
{
// Note: my_method_option has type MyMessage. We can set each field
// within it using a separate "option" line.
option (my_method_option).foo = 567;
option (my_method_option).bar = "Some string";
}
}protobuf涓殑option灝辨槸C#涓殑attribute錛宱ption鍚屾牱鍙互鏀懼湪message錛堝悓c#鐨刢lass錛?service錛堝悓c#鐨勬柟娉曪級 浠ュ強message鐨刦ield涓婇潰
鍥?娓告垙寮鍙戜腑濡備綍鍒╃敤protobuf鐨勮繖鍔熻兘鍛紵
1.絳栧垝浣跨敤protobuf浣滀負閰嶇疆鏂囦歡錛屾垜鍙互鍦ㄦ暟鎹畾涔変腑璁劇疆鏌愪釜瀛楁鐨刼ption涓篊#鐨勫摢涓帶浠訛紝
緙栬緫鍣ㄨ鍒拌繖涓暟鎹畾涔夊氨鍙互鐩存帴鐢熸垚涓涓帶浠訛紝鍥犳鍙互鏍規嵁鏁版嵁瀹氫箟鐢熸垚緙栬緫鍣ㄧ粰絳栧垝濉啓鏁版嵁銆備緥濡傦細
message BehaviorNodeConf
{
required int32 type = 1 [control = "textbox" max = 100 min = 0];
// 鏉′歡闇瑕佺殑鍙傛暟
repeated int32 args = 2 [control = "textbox"];
}; 2.鍐嶅錛?鎶鑳藉彲浠ユ柦鏀綽uff錛屾瘡涓猙uff閮藉簲璇ユ湁涓涓叧鑱旂殑鎶鑳斤紝閭d箞絳栧垝濉〃鐨勬椂鍊欒濉竴涓妧鑳界殑proto琛ㄨ繕瑕佸~涓涓猙uff鐨刾roto琛紝涓ゅ紶琛ㄧ瓥鍒掑緢瀹規槗灝卞~婕忎簡鎴戜滑鍙互鍔犱笂涓涓害鏉燂紝鐢辯紪杈戝櫒鍘繪鏌ワ細message Spell
{
required int32 id = 1;
optional int32 buffId = 2 [ref = "Buff.id"];
}
message Buff
{
required int32 id = 1 [ref = "Spell.buffId"];
optional int32 time = 2;
}緙栬緫鍣ㄥ~鍐欎竴涓猙uff浼氬幓媯鏌ユ槸鍚︽湁鍏寵仈榪欎釜buff鐨勬妧鑳藉瓨鍦紝濉妧鑳界殑鏃跺欏鏋滃~浜哹uff涔熻寮哄埗閰嶇疆鐩稿簲鐨刡uff錛岃繖鏍峰ぇ澶у噺灝戜簡閰嶇疆閿欒錛岀瓥鍒掍粠姝や粠濉〃閿欒涓В鑴卞嚭鏉ャ? 絳栧垝鐖戒簡錛岀▼搴忓憳鐨勭埥榪樿繙鍚楋紵 浠栧ソ鎴戜篃濂斤紒 protobuf鍐欑殑涓涓畝鏄搊rm,鐩墠瀹炵幇浜唖elect鍜寀pdate錛屽叾瀹冪殑鍚庣畫澧炲姞錛屽師鐞嗘槸涓鏍風殑浠g爜鍦板潃錛?https://github.com/egametang/Egametang/tree/master/Cpp/Platform/Orm

]]>