あなたがしようとしているのは、シリアル化です。オブジェクトをシリアライズするこの方法は安定しておらず、空港がどのようなものであるかによって大きく異なります。明示的なシリアライゼーションを使用する方が良いです。
Hereの説明には、どのようなシリアル化があり、なぜこのように作られたのですか。
MessagePackでは、典型的なシリアライズ・デシリアライゼーションのシナリオは次のようになります。
struct airport {
std::string name; //you can name your airports here
int planeCapacity;
int acceptPlanesFrom;
MSGPACK_DEFINE(name,planeCapacity,acceptPlanesFrom);
};
...
// define your airports
std::vector<airport> airports;
airport a={"BLA",1,2};
airport b={"BLB",3,4};
airports.push_back(a);
airports.push_back(b);
// create a platform-independent byte sequence from your data
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, airports) ;
std::string data=sbuf.data();//you can write that into a file
msgpack::unpacked msg;
// get your data safely back
msgpack::unpack(&msg, sbuf.data(), sbuf.size());
msgpack::object obj = msg.get();
std::cout<<obj<<std::endl;
// now convert the bytes back to your objects
std::vector<airport> read_airports;
obj.convert(&read_airports);
std::cout<<read_airports.size()<<std::endl;
をコンソール出力で:
[["BLA", 1, 2], ["BLB", 3, 4]]
2
これは 'airport'クラスの定義に依存します。 – molbdnilo
クラス空港{ int planeCapacity; int acceptPlanesFrom; //その他のいくつかのint public: コンストラクタ.. アクセサメソッド }; それはそうです。 –
あなたの入力ファイルにオブジェクトの有効なバイナリダンプが含まれていると思うのは、私には分かりません。あなたはそれを言わなかった。答えのほとんどがこのIMOを危険な前提にしています。また、 'c'で多少有効で使用されていたが、時代遅れのアプローチを提示しています。もしあなたが 'C++ 'でオブジェクトを扱っているのであれば、それは後でより早く非常にひどく終わるでしょう。 '空港'の最小の変更は互換性を損なうでしょう。入力ファイルの作成方法を教えてください。あなたは本当に記憶方法を知っていなくても読書方法を設計することはできません。彼らは強く結合している。 「空港」の定義も有用であろう。 – luk32