問題文 :ユーザーが、構造内に格納する必要があるデータを提供します。私が受け取るこのデータは、ユーザーが動的にデータを追加できるデータ構造になっています。
要件:このデータを構造体の「内部」に連続し て格納する方法が必要です。
例えば。ユーザーが、保存する必要がある文字列を渡すことができるとします。だから私はこのようなものを書きました:
void pushData( string userData )
{
struct
{
string junk;
} data;
data.junk = userData;
}
問題 :この種のストレージを実行すると、文字列は POD ではないため、実際のデータは実際には構造の「内部」に格納されません。ベクトルまたはリストを受け取ったときにも同様の問題が発生します。
次に、次のようなことができます:
void pushData( string userData )
{
struct
{
char junk[100];
} data;
// Copy userdata into array junk
}
これは構造の「内部」にデータを保存しますが、ユーザーが提供できる文字列のサイズに上限を設定することはできません。
誰かがいくつかのアプローチを提案できますか?
PS:シリアル化可能性について何か読んだことがありますが、私の場合に役立つかどうかははっきりとわかりませんでした。それが前進する方法である場合、誰かがそれをどのように進めるかについて考えを与えることができますか?
編集 :
- いいえ、これは宿題ではありません。
- メッセージ キューを介してこの種の構造を渡すことができる実装を作成しました。POD では問題なく動作しますが、動的データも渡すように拡張する必要があります。
これは、メッセージ キューがデータを取得する方法です。
私。ポインターを与えて、データを読み取って転送するサイズを伝えます。
ii. 単純な古いデータ型の場合、データは構造体内に格納されます。この構造体のメッセージ キューへのポインターを他のプロセスに簡単に渡すことができます。
iii. ただし、ベクター/文字列/リストなどの場合、実際のデータは構造内にないため、この構造のポインターを渡すと、メッセージキューは実際のデータではなく、内部に格納されるポインターを渡しますこの構造。