2016-11-27 9 views
1

プライベート変数をコード内のSTLクラスに追加する方法はありますか?たとえば、 "std :: list"のインスタンスに追加の変数が付加されるようにします。あるいは、自分のリストを一から作る必要がありますか?プライベート変数をC++ stlクラスに追加

+2

クラスを 'std :: list'から派生させてみませんか?一から自分自身を作ることは、通常、非常に悪い考えです。 – tadman

+1

@tadman 'private'lyを忘れないでください。 – LogicStuff

+8

[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように聞こえる - 実際に*達成しようとしていることは何ですか? –

答えて

3

場合によっては、はい。たとえば、std :: istreamとstd :: ostreamには、xalloc()というめったに使用されない特別なメソッドがあり、longまたはvoid*のメンバーをそれらのクラスのすべてのインスタンスに1つ以上追加できます。

しかし、それは典型的ではありません。 std :: listのようなコンテナクラスの場合、カスタムデータを格納するための「スロット」を追加するようなメンバフックはありません。

しかし、コンテナクラスには、アロケータのオプションのテンプレート引数があります。各コンテナにはアロケータがあり、デフォルトではステートレスで、newdeleteを使用して要素を割り当てます。 C++ 11以降では、これらのアロケータは「ステートフル」になります。つまり、newdeleteを使用して独自のアロケータを作成できますが、任意の余分なデータも格納できます。

必要な状態のアロケータを作成したら、それを取得することができます。 get_allocator()を使用してリストから削除します。

+0

アロケータの使用はスマートなトリックです。どうも。 – YSC

関連する問題