2
有名なcontainer_of
マクロを使用してマクロ専用リンクリストライブラリを実装するコードがあります。C言語の `container_of`マクロとCと同じ署名を持つ
それは今、私はそれをC++をサポートしたいので、私は次のシグネチャが一致したC++のためのcontainer_of
交換必要C.で完璧に動作します:
container_of(ptr, type, member)
Cの実装がこれです:
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr);
(type *)((char *)__mptr - offsetof(type,member));})
を
を実装することができます。 –
'offsetof'は、標準ライブラリのマクロであるため、関数の名前が貧弱です。 – aschepler
@aschelper実際にはこれらの一般的な名前は使用しませんが、教訓的な提案に対しては「デフォルト」のままにしておくのが良い点です。とにかく答えを編集し、名前に 'my_'という接頭辞を付けて衝突を避けました。 –