<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MGen跨語言對(duì)象序列化

          聯(lián)合創(chuàng)作 · 2023-09-28 16:36

          MGen 是一個(gè)支持跨語言的對(duì)象序列化項(xiàng)目,由以下兩部分組成:

          • 源碼生成的工具 ( MGen 編譯器 )

          • 語言的支持庫

          MGen 類似 Gooogle 的 Protocol Buffers ,可序列化到 JSON 和二進(jìn)制格式。

          目前支持的語言有:

          • C++

          • Java

          • JavaScript

          示例代碼:

          #include <com/fruitcompany/ClassRegistry.h>
          #include <mgen/serialization/JsonPrettyWriter.h>
          #include <mgen/serialization/JsonReader.h>
          
          using namespace mgen;
          using namespace com::fruitcompany;
          using namespace com::fruitcompany::fruits;
          
          // A class registry for type identification
          const ClassRegistry registry;
          
          std::string toJSON(const MGenBase& object) {
          
            // Create a target to stream the object to
            std::stringstream stream;
          
            // Create a writer object
            JsonPrettyWriter<std::stringstream, ClassRegistry> writer(stream, registry);
          
            // Write the object
            writer.writeObject(object);
          
            // Return the written string
            return stream.str();
          }
          
          template <typename T>
          T fromJSON(const std::string& json) {
          
            // Create a data source to stream objects from
            std::stringstream stream(json);
          
            // Create a reader object
            JsonReader<std::stringstream, ClassRegistry> reader(stream, registry);
          
            // Read object. You can read T* polymorphicly with reader.readObject<T>()
            return reader.readStatic<T>();
          }
          
          int main() {
          
            // Create some objects
            const Apple apple(Brand_A, 4);
            const Banana banana = Banana().setLength(5).setBrand(Brand_B);
          
            // Serialize them to JSON and print them
            std::cout << toJSON(banana) << std::endl;
            std::cout << toJSON(apple) << std::endl;
          
            // Read the objects back from their serialized form
            const Apple appleBack = fromJSON<Apple>(toJSON(apple));
            const Banana bananaBack = fromJSON<Banana>(toJSON(banana));
          
            // Check that they are still the same
            std::cout << (apple == appleBack) << std::endl;
            std::cout << (banana == bananaBack) << std::endl;
          
            return 0;
          }
          瀏覽 16
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产变态视频a片一二三 | 久久国产精品视频 | 欧美色色爱爱男人天堂 | 白白日韩在线观看 | 操老女人视频在线观看 |