問題タブ [unnamed-namespace]

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.

0 投票する
0 に答える
61 参照

c++ - ヘッダーで関数テンプレートを定義し、ヘッダーを含むファイルにアクセスできないようにする方法はありますか?

次のようなクラス テンプレートがあります。

foo.h

foo.tpp

ファイルは無視して.tppください。これは、宣言と実装を分離しているように見せるために私が行っていることであり、明らかに、テンプレートでは (一種の) 不可能です。

私の実装ファイルは実際にははるかに長く、その中にメンバー関数が使用するグローバル スコープ ヘルパー関数テンプレート、メンバー関数として意味をなさない関数、およびクラスのユーザーに何も持たせたくない関数があります。すること。

私は常に実装ファイルでこれを行っていますが、この偽のバージョンのファイルでこれを行うと、これらの小さなヘルパー関数の宣言と実装が実際にはクラス テンプレート ヘッダー ファイルで.cpp行われることを忘れていました。.cppこれにより、クラス テンプレート ヘッダーのユーザーの名前空間が、メンバー関数の実装の外では役に立たないヘルパー関数で雑然としてしまいます。

明らかに、それらを名前空間に入れることができます:

しかし、それでも外部コードがこれらの関数を使用できるようになります。それらはメンバー関数の実装にのみ重要であり、それを反映したいと思います。

解決策を探しているときに、名前のない名前空間の概念について学びました。私が理解しているように、現在の翻訳単位のみがそのコンテンツにアクセスできるようになっています。それはまさに私が必要としているもののように聞こえるので、ヘルパー関数を次のように変更しました。

しかし、機能しません。関数は、ヘッダーを含むファイルから引き続き使用できます。

これらのヘルパー関数を外部コードから隠す方法はありますか?