'typedef'で定義された型にフィールド/メソッドを追加する方法はありますか?
最初に答える必要があるのは、typedef実際の意味です。Aは既存のタイプのエイリアスtypedefを作成しますが、新しいタイプは作成しません。新しい名前の後は、元の名前とまったく同じタイプを参照し、ほとんどのコンテキストで両方の名前を同じ意味で使用できます*。typedef
typedefそれが明確になると、答えは明白に見えます。エイリアスは他のタイプを正確に参照しているため、エイリアスに機能を追加したり、エイリアスから機能を削除したりすることはできません。2つのタイプはなく、1つだけです。オリジナルです。
*元のタイプと、aを介して作成されたエイリアスは、typedefほとんど違いはありませんが、100%同等ではありません。特に、元のタイプの名前(ユーザー定義であると想定)は、関数、変数、またはエイリアスstd::vector<X>とは異なる識別子スペースにあります。typedef名前は型のtypedef名前ではなく、型のエイリアスです。次のコードは、違いの1つを示しています。
struct A {};
typedef A B;
struct A a; // creates a variable `a` of type `A`
//struct B b; // error, `B` is a typedef, not a `struct`
最も顕著な違いのいくつかは、複数の翻訳ユニットをコンパイルする場合にのみ明確になります。typedefエイリアスは常に翻訳ユニットの内部にあります。オブジェクトファイルで生成されたシンボルは、を参照しませんtypedef。コンパイラはtypedef実際の型を解決し、すべての記号と名前マングリングは実際の型が使用されたかのように実行されます。