2

巨大なコードベースのインクルード ファイルの 1 つに、次のステートメントがあります。

using std::some_function

some_functionただし、「未使用」にして別のを使用したいsome_function。ほとんどのコード ベースがこのヘッダーに依存しているため、このヘッダーを変更することはできません。

そうする可能性はありますか?

4

2 に答える 2

3

ないと思います。関数を名前空間に配置し、その使用を限定する必要があります。

namespace MyNamespace
{
   void some_function();
}

//...
MyNamespace::some_function();

もちろん、あなたができる最善の方法は、usingディレクティブを削除してコードを修正することですが、(悲しいことに)これが常にオプションではない理由を理解しています。

編集:たぶんusingディレクティブは怠惰のためにそこにはありませんが、誰かが実際にあなた自身のsome_function.

于 2013-02-18T09:56:41.000 に答える
1

「未使用」の範囲をどうしたいかによって異なります。

スコープが設定されている場合 (独自の名前空間、またはさらに良いのは関数)、スコープに入れることができusing MyNamespace::some_function;ます。

それがグローバルスコープである場合、元のヘッダーの作成者はあなたを却下しました-実際、彼らは::some_function最初に名前を取得し、他の目的でそれを使用することを妨げました. std関数をグローバル名前空間にプルするべきではありませんが、エラーに対処する必要があります。

彼らが犯したのと同じ過ちを犯したくないと仮定すると、「未使用」を1つのソースファイルにのみ適用したいので、ヘッダーのグローバルスコープに入れません。その場合は可能 #define some_function MyNamespace::some_functionですが、お勧めしません。コードの読者/保守担当者は、小文字の名前が実際にはマクロであることを理解する必要があるとは思わないからです。

Ifsome_functionが関数 (タイトルのようなクラスではない) であり、1 つのオーバーロードのみを処理している場合 (たとえばvoid some_function()、 の場合、別の醜い回避策があります。別のパラメーターを追加します。

static void some_function(int) { MyNamespace::some_function(); }

次に、それを as として呼び出してsome_function(0)、バージョンを取得できますMyNamespace。しかし、追加のテキスト (この場合0は ) を入力する場合は、予想どおりの方法で入力することをお勧めします。その追加のテキストをMyNamespace::にするか、別の名前を使用するだけです。

于 2013-02-18T10:35:32.977 に答える