最近、頭の中であれこれ考えています。私たちのほとんどは、構造体を作成するために、オブジェクトを参照する前にキーワードを呼び出すことを避けるためC
に、通常、構造体の前に a を付けることをよく知っています。もちろん、C はクラスではなく構造体に限定されています。これを補うために、C は構造体専用のグローバル関数を使用してオブジェクト指向アプローチを作成する傾向があります。typedef
struct
例えば:
typedef struct{
int foo;
float bar;
char* baz;
} SomeStruct;
対。
struct AnotherStruct {
int foo;
float bar;
char* baz;
};
AnotherStruct
struct
その型のオブジェクトが関数内で宣言されている場合、その前にprefix キーワードが必要です。例えば:
int main( ... )
{
struct AnotherStruct obj1; //correct
SomeStruct obj2; //correct
struct SomeStruct obj3; //bad
AnotherStruct obj4; //bad
}
オブジェクト指向のアプローチに関しては、次のとおりです。
typedef struct {
//member variables here
} SomeStruct;
SomeStruct* SomeStruct_New( int a, int b, int c )
{
SomeStruct* obj = calloc( sizeof( SomeStruct ), 1 ); //not sure if that's correct -- been a while since I've used calloc.
obj.a = a;
obj.b = b;
obj.c = c;
return obj;
}
void SomeStruct_Free( SomeStruct* free )
{
free( free );
}
これらの関数は、ラッパーを使用せずに実装するのが非常に簡単です。例として使用しているだけです。typedef
私の要点は、キーワードなしで宣言する必要のない構造体を C++ で既に作成できstruct
、オブジェクト指向アプローチのためにこれらの構造体に関連するカプセル化されていない関数を使用できることを考えると、オブジェクトへのポインターを返すグローバル関数コンストラクターとともに、静的グローバル関数をプライベートメンバー関数として使用することを含む、C++ でコーディングする C アプローチには利点があります。
これは主に好奇心によるもので、C のアプローチを取るためだけに取りたくなることがありますが、これは単なる優先事項かもしれません。