@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. Как это должно работать?
  • Вопрос задан
  • 2102 просмотра
Решения вопроса 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".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час