Так вот сходу трудно въехать в архитектуру чужого проекта "... некоторые сущности имеющие одинаковый набор структур
одного назначения, но с разным набором данных. Эти структуры
имеют одинаковые имена..."
Так я бы делать не стал. Не стал бы структурам с разным
содержимым присваивать одинаковые имена.
(что мне, хеадеров жалко, что-ли?)
Я бы описал бы какой - нибудь подходящий по функционалу
интерфейс. Например, work:
class l_work
{
public:
virtual int work() =0;
};
Для каждой сущности смастерил свою реализацию
интерфейса и в библиотеку их.
А дальше используем в проектах эти реализации
по мере сил. И не важно из каких структур и классов
они сделаны.
😏