Анонимное пространство имен в файле реализации шаблона

В файле.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;

1 ответ

Это должно сделать трюк:

// object.h
{
    namespace {
        using verbose::namespace::type;
    }

    ...

    struct object {  
        type value;
    }
}

Пространства имен должны быть действительными только в пределах блока кода, в котором они определены.

Другие вопросы по тегам