Еще раз уточню про замысел: оно не случайно совпало, именно так и
задумано. Есть несколько сущностей, которые имеют одинаковый набор
структур с одинаковым назначением, но разным набором данных. Вот
эти структуры и имеют одинаковые имена, ибо логично и некоторая
защита от ошибок в будущем. Каждая из этих сущностей - отдельное электронное устройство, имеющее свой проект. В проекте "головного" устройства все эти сущности объединяются в виде подключения хедеров со структурами (одноименными).
Если я буду в каждом проекте выдумывать собственные имена для структур, то по сути это будет то же самое, что и namespace в проекте головного устройства, но ближе к говнокоду. Использование namespace проще и прозрачнее. Просто я посетовал, что using namespace использовать не могу. Без using - могу, но писанины чуть больше.
Выглядит в проекте головного устройства примерно так (вырезка из описания класса одной из сущностей по имени PowerUnit):
namespace PowerUnitNamespace {
#include <modules/powerunit.h> // это подключение хедера с определением структур. powerunit.h берется прямо из проекта модуля, написанного на C
}
class PowerUnit : public Module {
// using namespace PowerUnitNamespace;
public:
PowerUnit(uint8_t addr) {
type = PWRUNIT;
address = addr;
};
//Класс PowerUnit содержит в себе вот эти структуры
PowerUnitNamespace::NonvolatileDataFolder_t nvDataFolder, nvDataInFolder;
PowerUnitNamespace::SensorsFolder_t sensorsFolder;
PowerUnitNamespace::FirmwareFolder_t firmwareFolder;
PowerUnitNamespace::ControlFolder_t controlFolder;
PowerUnitNamespace::ModuleCommandFolder_t moduleCommandFolder;
//соответсвенно, классы других устройств/модулей содержат структуры с этими же именами, но разделенными пространством имен, например DeviceType::SensorsFolder_t sensorsFolder;