ジェネリックアレイを純粋なANSI-Cで複製することは可能ですか?純粋なANSI-C:ジェネリックアレイを作る
私は配列(現時点では浮動小数点用)と配列内のサイズや容量のような変数を保持するこの構造体を持っています。それは除いて、私は、「標準」のアレイが行うすべてのものなど、必要なときに動的配列のサイズを拡大し、これは私は、私はアイテムを追加/削除することができ、純粋なCの配列を作ることができストラクト使用
typedef struct _CustomArray
{
float* array; //the array in which the objects will be stored
int size; //the current size of the array
int capacity; //the max capacity of the array
} CustomArray;
Cのみで作られています。 これで、この構造体を初期化するときに保持する必要がある要素のデータ型を設定できるようにしたいと思います。現時点ではfloat型のデータ型しか格納できませんが、データ型/その他の構造体。しかし、これが可能かどうかは分かりません。
この時点では、この配列があることを確認するための機能:
CustomArray* CustomArray_Create(int initCapacity, /*type elementType*/)
{
CustomArray* customArray_ptr; //create pointer to point at the structure
float* internalArray = (float*)malloc(sizeof(float) * initCapacity); //create the internal array that holds the items
if(internalArray != NULL)
{
CustomArray customArray = { internalArray, 0, initCapacity }; //make the struct with the data
customArray_ptr = &customArray; //get the adress of the structure and assign it to the pointer
return customArray_ptr; //return the pointer
}
return NULL;
}
それはので、私はそのデータ型にメモリをmallocと動的配列で、与えられたデータ型としてそれをキャストすることができ、パラメータとしてデータ型を付与することができます?事前に
おかげで、
マーニックスバンライスワイク
はピュアCであなたがそのようなデータ型を渡すことができるとは思いません。異種配列リスト(C#など)をサポートする言語を調べると、基本ではないデータ型、すなわちint型、float型などではなく、Classesでのみ動作します。Cはオブジェクト指向ではないため、この機能を得ることはほとんどありません。 –
識別子をアンダースコアで開始しないでください。そのような名前は実装用に予約されています(compiler + libc)。アンダースコアと大文字を使用すると後者が重複します:これらの名前は、新しい言語機能が使用するものなので、どんなコンテキストでも予約されています(例えば、 '_Pragma'、' _Complex'、 '_Bool'など)。簡単な回避策は末尾のアンダースコアを使用することです。これはプレフィックスベースの名前空間でもうまくいきます。 – Christoph
cでオブジェクト指向のビヘイビアをどのように構築できるかについては、サイト上で多くの質問があります。[Cのオブジェクト指向(http: /stackoverflow.com/q/415452/2509)と[Cでオブジェクト指向のコードを書くことができますか?](http://stackoverflow.com/q/351733/2509)などがあります。あなたは 'sizeof'とリンクで議論されている関数ポインタのメカニズムを賢明に使って、望む結果を達成することができますが、それは価値があるより多くの作業になります。 'qsort'と' bsearch'のインターフェースは妥協です。 – dmckee