Вот что я привык делать:
«Некоторые объекты имеют одинаковые имена, но находятся в разных пространствах имен»
Вот почему существует пространство имен.
«было бы целесообразно создать второй файл .h выставить только открытый API?»
Вы всегда должны подвергать только открытый API. Но что значит публиковать открытый API? Если бы тогда были только заголовки, поскольку публичный API полагался на частный API, частный API был бы включен публичным API в любом случае. Чтобы публиковать общедоступные API-метки публичных функций/классов с макросом (который в случае Windows экспортирует публичные функции в таблицу символов и, вероятно, вскоре будет принят системами Unix). Поэтому вы должны определить макрос, например MYLIB_API или MYLIB_DECLSPEC, просто проверьте некоторые существующие библиотеки и документацию MS declspec. Достаточно, обычно непубличный API будет храниться в подкаталогах, чтобы он не посещал пользователя библиотеки.
«Должны ли они быть файлом .h для пространства имен или для какого-либо объекта или какой-либо другой области?»
Я предпочитаю Java-стиль, один public класс за заголовок. Я обнаружил, что листы, написанные таким образом, намного чище и читабельны, чем те, которые смешивают имена файлов и структуры. Но бывают случаи, когда я торможу это правило, особенно когда дело касается шаблонов. В таких случаях я даю сообщение #warning, чтобы не включать заголовок напрямую и тщательно объяснять в комментариях, что происходит.
Но когда все вместе складывается в одной .so-библиотеке, я могу распространять структуру каталогов с глубоким включением? Chenz –
Я имею в виду .so или .dll –
@Crazy Chenz, да, это возможность. Вот как это делается в ядре Linux, например, и в некоторой степени. – shoosh