10

C++11 [atomics.types.generic]p7:

atomic表 145 で指定されているように、 の整数特殊化に対応する名前付きの型atomic_boolと、指定された に対応する名前付きの型が存在する必要がありますatomic<bool>。名前付きの各型は、対応する特殊化の typedefまたは対応する特殊化の基本クラスです。基本クラスの場合、対応する特殊化と同じメンバー関数をサポートする必要があります。

(強調追加)

std::atomic_charを と同一にしないstd::atomic<char>など、他のすべてのタイプを同じにする理由は何ですか? これによりどのような柔軟性が可能になり、なぜ便利なのですか? 一見しただけでは、なぜこれらがstd::atomic<T>直接特殊化への typedef である必要がないのか理解できません。

提案されたN2427<atomic>は、typedef は正確に特殊化するものであり、基本クラスではない可能性があると述べていることに注意してください。

4

1 に答える 1

2

おそらく、誰かがstd::atomic_*型を基本クラスとして使用するアトミックの実装をすでに持っていて、このアプローチに対して十分に不満を述べているか、適切な議論を提供しているためです。

MSVCでは、そのような実装が提案されています。

この中で述べられているのは

atomic_.... 名前付き型と対応するアトミック テンプレート クラスの特殊化との間の定義的な基本クラスの関係を削除します。基本クラスの関係は、実装に依存するようになりました。この変更により、C との互換性が確保されます。以前は基本クラスから継承されていた一部のメンバー関数と演算子は、名前付き型から特殊化に引き上げる必要があります。

于 2013-05-08T13:43:25.423 に答える