1

私は現在、random.orgにアクセスしてランダムな文字列または整数を取得できる小さなライブラリを作成しています。しかし、今はちょっとした問題にぶつかりましたが、デザイン的には、2つのアプローチのどちらが最適か判断できないので、両方についての考えを書き留め、両方に関連すると思われる質問をします。 。

私は現在このような構造体を持っています:

typedef struct {
char **array;
size_t row;
size_t col;
size_t size; 
} MemoryStruct;

そして、これが私の「問題」の原因です。これは、整数処理をライブラリに追加したためです。

ご覧のとおり、ポインターは現在charポインターです。ブロットの整数と文字を処理できるようにしたいので、別のポインター(整数ポインター)を追加するか、代わりにvoidポインターにして正しいタイプのポインタを返す関数?

整数ポインタを追加するのが最も簡単ですが、将来のある時点で私のライブラリを使用する可能性のある人にとって、それがどれほど明白に見えるかはわかりません。これが、彼のプログラムが間違って使用したためにセグフォールトする理由です。構造体のポインタ。

ただし、代わりにvoidポインターを追加すると、正しいタイプのポインターを返すコンテキストベースの関数を実行する必要があります(これが可能かどうかは正直にわかりません)。質問:

さまざまな種類のポインタを返すことができる関数には、どの戻り型がありますか?(...それは明らかです、voidポインターです!)しかし、それでも私は私のライブラリを使用しているプログラマーが簡単に使用できるように必要な型が含まれていません-これが私がやりたいことを擬似コードに入れています。

pointer-with-type-info *fun(MemoryStruct *memory, RandomSession *session)
switch case on session->type
return pointer of appropriate type

ここに追加する必要があります。session->typeから、ポインタがどのタイプであるかを推測できます。

よろしくお願いします。

4

1 に答える 1

1

私があなたの質問を理解した方法で、あなたはポインタのデータ型を知っています。void*フィールドを作成せずに後でデータ型を追加できるため、2つのポインターの代わりに使用します。

正しい値を取得するために、2つの関数を作成できます:int getAsString(MemoryStruct, char** value)int getAsInteger(MemoryStruct, int &value)。これらの関数は、成功した場合にゼロ以外の値を返します(true)。このようにして、正しい値を取得できるだけでなく、このデータ型として値を取得できるかどうかを知る方法もあります。

于 2013-01-23T15:34:33.803 に答える