Ограничение 'использования' директив в текущий файл

Извините за этот глупый вопрос, но там любой способ ограничить using директивы в текущий файл так, чтобы они не распространяли в файлы это #include этот файл?

5
задан missingfaktor 5 April 2010 в 08:44
поделиться

3 ответа

Возможно, включение кода в собственное пространство имен может привести к желаемому
поведению, поскольку пространства имен влияют на область видимости.

// 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
...
4
ответ дан 18 December 2019 в 06:49
поделиться

Технически вы должны иметь возможность импортировать их в какое-то внутреннее пространство имен, а затем сделать объекты, объявленные в этом, видимыми в пространстве имен, предназначенном для пользователя. .

#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';
}

Не уверен, стоит ли это того, и насколько хорошо он работает с «поиском, зависимым от аргументов».

4
ответ дан 18 December 2019 в 06:49
поделиться

Нет, нет, поэтому вам не следует использовать директивы using в файлах заголовков или любых других файлах, которые вы #include.

15
ответ дан 18 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: