@ned_as

Как правильно использовать anonymous namespace?

Как я могу использовать структуры и функции из анонимного namespace?
Грубо говоря, есть несколько "служебных" структур и функций, которые используются внутри класса (и только в этом файле) и наружу торчать не должны. Хочу их скрыть с помощью анонимного namespace'а, но, если оставлю анонимный namespace в .h файле, то попадаю на нарушение ODR (насколько я понимаю) Вынести в .cpp файл не могу, попадаю на incomplete type.
Если более кратко, есть подобная конструкция:
namespace a {
    namespace {
        struct ex {
            int a;
            ...
        }
        void foo() { ... };
    }
    
    class F {
        ex data[4];
    public:
        f() { foo(); }     
    }
}

Я хочу, чтобы структура ex и функция foo() не были доступны для использования из другого файла, но также хочу использовать их в классе F. Как это должно работать?
  • Вопрос задан
  • 1887 просмотров
Решения вопроса 2
@MarkusD Куратор тега C++
все время мелю чепуху :)
Если хочется полностью исключить возможность использования приватных выражений, то использовать стоит не пространства имен, а класс с вложенными типами под соответствующими секциями.
class a final
{
private:
	class ex
	{
		int f = 0;
	};
	
	static void foo() { std::cout << 'f' << std::endl; };
	
public:
	class F
	{
	public:
		F() { foo(); };
		
	private:
		ex m_exes[4];
	};
};
Ответ написан
maaGames
@maaGames
Погроммирую программы
Такое делают при помощи PImpl, если есть реальная необходимость скрыть детали реализации. Решает проблему "incomplete type".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы