配列に typedef を使用する場合は、次のように使用されます。
typedef int Color[3];
それは私にとって非常に直感に反しています。
なぜだめですかtypedef int[3] Color[3]?
typedef
通常の vairable 宣言とまったく同じように見えます。これはたまたま C での配列宣言の外観です (そして C++ に継承されます):
int foo[3]; // Array of three int
typedef int FooT[3]; // typedef for array of three int.
残念ながら、それが言語の定義方法です。参考までに、typedef
構文は宣言構文と同じように見えます。
int Color[3];
3 つの整数の配列を作成するので、次のようになります。
typedef int Color[3];
3 つの整数の配列を型定義します。
構文一致の便利な利点は、次のようなツールを使用してcdecl(1)
それらを生成または説明できることです。
cdecl> explain int Color[3]
declare Color as array 3 of int
cdecl> declare Color as array 3 of int
int Color[3]
Typedef は単純に変数の定義のように機能し、すべて同じ規則 (既に確立されて既知の規則) に従いますが、変数名の代わりに型を示すという唯一の違いがあります。
いくつかの新しいスキームを実装するのではなく (例として、配列へのポインターとポインターの配列など、すべての微妙なことを処理する必要があります)、既存のスキームを使用することが賢明な選択です。
使用することをお勧めします
typedef std::array<int,3> RGB_Type;
これは、他の C++ std コンテナーの typedef と一致しています。
(申し訳ありませんが、C++ のみですが、それはタイトルに記載されていました。)
C++11 では、目的に近い構文を作成できます。
template<typename T>
using type_def = T;
type_def<int[3]> colors;
一見すると、私はそれをお勧めしません: 一方、いくつかの本当に複雑な型宣言は、このメカニズムによって大幅に簡素化できます。typedef
最終的な型を読みやすくすることのみを目的とする複雑な型の「プレースホルダー」を取り除きます。