В файле .cpp анонимное пространство имен в основном имеет связь со всем файлом (после #include), поскольку файл .cpp никогда не будет включен другим файлом. Но тот же шаблон в заголовочном файле распространяет это анонимное пространство имен туда, куда он включен. Есть ли способ создать аналогичный эффект в заголовочном файле? Я спрашиваю, потому что реализации шаблона должны быть в заголовках.
Простой пример в обычном .h файле:
// object.h
namespace {
using verbose::namespace::type;
}
...
struct object {
type value;
}
или аналогично в некотором файле реализации шаблона. Тип type
будет в объеме, где этот файл включен.
Это можно обойти?
РЕДАКТИРОВАТЬ: я думаю, что нашел подробный, но выполнимый ответ.
// object.h
struct Namespace {
using verbose::namespace::type;
Namespace() = delete;
struct object {
type value;
};
};
using Namespace::object;
Это должно сделать трюк:
// object.h
{
namespace {
using verbose::namespace::type;
}
...
struct object {
type value;
}
}
Пространства имен должны быть действительными только в пределах блока кода, в котором они определены.
Других решений пока нет …