巨大なコードベースのインクルード ファイルの 1 つに、次のステートメントがあります。
using std::some_function
some_function
ただし、「未使用」にして別のを使用したいsome_function
。ほとんどのコード ベースがこのヘッダーに依存しているため、このヘッダーを変更することはできません。
そうする可能性はありますか?
巨大なコードベースのインクルード ファイルの 1 つに、次のステートメントがあります。
using std::some_function
some_function
ただし、「未使用」にして別のを使用したいsome_function
。ほとんどのコード ベースがこのヘッダーに依存しているため、このヘッダーを変更することはできません。
そうする可能性はありますか?
ないと思います。関数を名前空間に配置し、その使用を限定する必要があります。
namespace MyNamespace
{
void some_function();
}
//...
MyNamespace::some_function();
もちろん、あなたができる最善の方法は、using
ディレクティブを削除してコードを修正することですが、(悲しいことに)これが常にオプションではない理由を理解しています。
編集:たぶん、using
ディレクティブは怠惰のためにそこにはありませんが、誰かが実際にあなた自身のsome_function
.
「未使用」の範囲をどうしたいかによって異なります。
スコープが設定されている場合 (独自の名前空間、またはさらに良いのは関数)、スコープに入れることができ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::
にするか、別の名前を使用するだけです。