Извините за этот глупый вопрос, но там любой способ ограничить using
директивы в текущий файл так, чтобы они не распространяли в файлы это #include
этот файл?
Возможно, включение кода в собственное пространство имен может привести к желаемому
поведению, поскольку пространства имен влияют на область видимости.
// 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
...
Технически вы должны иметь возможность импортировать их в какое-то внутреннее пространство имен, а затем сделать объекты, объявленные в этом, видимыми в пространстве имен, предназначенном для пользователя. .
#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';
}
Не уверен, стоит ли это того, и насколько хорошо он работает с «поиском, зависимым от аргументов».
Нет, нет, поэтому вам не следует использовать директивы using в файлах заголовков или любых других файлах, которые вы #include.