2017-06-28 13 views
2

タプルをバイト配列に変換する関数を書く必要があります。タプル<文字列、整数、ダブル> T1(: タプルのタイプはINT、長い、二重、のstd ::などの文字列、チャー*、 タプルのサイズと種類を含むことができるが、そのような STDとして、任意です"abc"、1、1.3) または std:tuple < char *、int、int、float、double、string> t2( "abc"、1,2,1.3,1.4、 "hello") 'タプルをC++のバイト配列に変換する方法11

これらのタプルを入力として使用し、バイト配列を戻り値として使用します。私は何をすべきか ?

+0

あなたはタプルをシリアライズとデシリアライズしたいことを意味するかタプルをサポートしていmessage packための華麗なC++ APIもありますか? – Curious

+0

バイト配列に変換するには、シリアル化が必要で、しばしばマーシャリングが必要です。単一のシリアライズ・フォーマットはありません。最初に表現を選択する必要があります。 –

+0

@BrianCain確かに私もそのことを暗示しています – Curious

答えて

2

std::tupleの小さな拡張と共に、このタスクのブーストシリアル化を使用できます。しかし、デフォルトではバイト配列に変換されるのではなく、別の配列に変換されます。 binary_oarchiveもあります。おそらく、これはあなたのニーズに合っています。

#include <fstream> 
#include <tuple> 

#include <boost/archive/text_oarchive.hpp> 

#include "serialize_tuple.h" // https://github.com/Sydius/serialize-tuple 

int main() 
{ 
    auto t = std::make_tuple(42,3.14,'a'); 

    std::ofstream ofs("test.dat"); 
    boost::archive::text_oarchive oa(ofs); 
    oa << t; 
} 
3

ネイティブ

#include <string> 
#include <sstream> 
#include <tuple> 

#include <msgpack.hpp> 

int main() { 
    auto t = std::make_tuple("1", 1, 1.0); 
    auto buffer = std::stringstream{}; 

    // easy peezy 
    msgpack::pack(buffer, t); 
    auto tuple_as_string = buffer.str(); 
} 
関連する問題