このばかげた質問で申し訳ありませんが、using
ディレクティブを現在のファイルに制限して、このファイルのファイルに伝播しないようにする方法はあり#include
ますか?
3 に答える
15
いいえ、ありません。そのため、ヘッダーファイルや#includeするその他のファイルでディレクティブを使用しないでください。
于 2010-04-05T08:46:31.580 に答える
4
名前空間はスコープに影響を与えるため、おそらく、独自の名前空間内に含まれるようにコードをラップすることで、目的の動作を実現できます。
// FILENAME is the file to be included
namespace FILENAME_NS {
using namespace std;
namespace INNER_NS {
[wrapped code]
}
}
using namespace FILENAME_NS::INNER_NS;
と他のファイルで
#include <FILENAME>
// std namespace is not visible, only INNER_NS definitions and declarations
...
于 2010-04-05T10:34:46.530 に答える
4
技術的には、それらを内部名前空間にインポートして、その中で宣言されているものをユーザー向けの名前空間に表示できるようにする必要があります。
#ifndef HEADER_HPP
#define HEADER_HPP
#include <string>
namespace my_detail
{
using std::string;
inline string concatenate(const string& a, const string& b) { return a + b; }
}
namespace my_namespace
{
using my_detail::concatenate;
}
#endif
#include <iostream>
#include "header.hpp"
using namespace my_namespace;
int main()
{
std:: //required
string a("Hello "), b("world!");
std::cout << concatenate(a, b) << '\n';
}
トラブルに見合う価値があるかどうか、そして「引数依存のルックアップ」でどれだけうまく機能するかはわかりません。
于 2010-04-05T10:35:29.630 に答える