問題タブ [inline-namespaces]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - MSVCのインライン名前空間エミュレーション(10.0 / 11.0)
inline namespace
MSVCでをエミュレートする方法はありますか?
LLVMのlibc++はこれを使用して、次のような非表示のバージョン管理された名前空間を作成します。
そして、次のようにGCCでエミュレートします。
今私の質問は、MSVCで同じことをどのように達成するのですか?それが不可能な場合は、バージョン管理を省略したソリューションに満足します(今のところ)。
しかし、ある種の目的を打ち負かします...
c++ - C++0x 標準と互換性のある Coverity 静的解析を取得するにはどうすればよいですか?
Wind River Compiler 4 (gcc (C) および g++ (C++)) を使用していますが、すべてのプロジェクトを問題なくコンパイルできます。ここで、Coverity Static Analysis を使用してコードをチェックする必要があります。特定のコンパイラを構成しました。C コード (gcc) では問題はなく、解析を実行できますが、C++ コード (g++) では多くのエラーが発生しました。
インライン名前空間のような C++11 固有の機能のようですが、コードはこれらの機能を使用していません。上記のエラーは、HelloWorld コードで生成されます。
g++ オプションを使用して C++ 標準を設定しようとしました
しかし、結果は変わりません。
Test-Code は大きなビルド階層にありますが、Coverity の手順は次のようになります。
- ターゲットと環境セット (Wind River 4 Linux)
- きれいにする
- コンパイラのディレクトリとタイプを使用した cov-configure
- 単独で動作する正しい「make all」コマンドを使用した cov-build
- cov-分析
- if (no_error) cov-commit-defects
また、cov-build 中にすべての「インライン名前空間」を「名前空間」に置き換えるように Coverity を構成しました ( --ppp-translator replace/inline namespace/namespace
)。インライン エラーは消えましたが、この過負荷エラーがさらに発生し、正常にビルドされません。また、同じ方法で「C++」を削除しようとしましたが、うまくいきませんでした。常により多くのエラーが発生します。
ここで何が問題なのか、誰にも分かりますか?また、Coverity ビルドをエラーなしで入手するにはどうすればよいですか? C++ 標準ヘッダーを無視するように Coverity を構成することはできるかもしれませんが、その方法はわかりません。
c++ - インライン名前空間とは何ですか?
C ++ 11ではinline namespace
sを使用でき、そのすべてのメンバーも自動的に囲んでいnamespace
ます。私はこれの有用なアプリケーションを考えることができません-誰かinline namespace
が必要とされる状況とそれが最も慣用的な解決策である状況の簡潔で簡潔な例を教えてもらえますか?
namespace
(また、aが1つの宣言で宣言されたときに何が起こるかはわかりませんが、inline
すべての宣言ではなく、異なるファイルに存在する可能性があります。これは問題を引き起こしていませんか?)
c++ - 名前のない名前空間をインライン化するのはなぜですか?
専門家向けの簡単な説明: C++11 では、名前のない名前空間を宣言できますinline
。これは冗長に思えます。名前のない名前空間で宣言されたものは、囲んでいる名前空間で宣言されているかのように既に使用されています。
だから私の質問はこれです:言うことはどういう意味ですか
そして、それは伝統的なものとどう違うのですか
私たちが C++98 から知っていて、愛しているのは? を使用した場合の異なる動作の例を誰か挙げてもらえますinline
か?
編集:この質問は重複としてマークされているため、明確にするために:名前付きインライン名前空間全般について質問しているわけではありません。私はそこでのユースケースを理解しており、素晴らしいと思います。名前のない名前空間を として宣言することの意味を具体的に尋ねていますinline
。inline
名前のない名前空間は常にTUに対してローカルであるため、シンボルのバージョン管理の合理性は適用されないようです。
余談ですが、名前のない名前空間に関する標準 [7.3.1.1] は次のように述べています。
inline
unnamed-namespace-definitionに表示される場合にのみ表示されます
しかし、これは言語を知らない私の弁護士の目にはトートロジーのように見えます。おまけとして、このちょっとした標準語が実際に何を言っているのか説明できる人はいますか?
編集: Cubbiはコメントでボーナスポイントを主張しました:
標準では、unnamed-namespace-definition は、unnamed-namespace-definitionに表示される場合、 Xに表示されるXに置き換えられたかのように動作すると述べています。
inline
c++ - C++ でプラットフォーム固有のコードを管理するためのインライン名前空間手法
プラットフォーム固有の管理に #ifdef マクロ ( Eigen ライブラリの例 ) を使用しているのを見たことがありますが、「インライン名前空間」を使用してプラットフォーム固有のコードを管理している人は見たことがありません。
以下の github リポジトリには、特定のコードと使用例が示されています。 https://github.com/dchichkov/curious-namespace-trick/wiki/Curious-Namespace-Trick
使用する実行可能な手法なのか、それとも私が見ることができない落とし穴があるのか 疑問に思っています. 以下はコード スニペットです。
出力:
$g++ func.cpp -Dplatform=common ; ./a.out 共通追加
$ g++ func.cpp -Dplatform=arm ; ./a.out アーム追加
c++ - std::literals::.. がインライン名前空間であることの利点は何ですか?
C++ 標準 (例: N4594) には、次の 2 つの定義がありますoperator""s
。
1 つstd::chrono::seconds
:
と 1 つstd::string
:
それらstd::literals
がinline
.
それらは別々の名前空間内にあると思っていたので、互いに競合しません。しかし、彼らがそうである場合inline
、この動機は元に戻されますよね? 編集: Bjarne は、主な動機は「ライブラリのバージョン管理」であると説明していますが、これはここには当てはまりません。
「Seconds」と「String」のオーバーロードが異なるため、競合しないことがわかります。しかし、オーバーロードが同じ場合、それらは競合しますか? inline
または、 ( ?)を取ると、namespace
どういうわけかそれが妨げられますか?
したがって、それらがinline namespace
まったく存在することから何が得られるのでしょうか? @Columbo が以下で指摘しているように、インライン名前空間全体のオーバーロードはどのように解決され、衝突しますか?