У меня есть два класса. Один из них - это класс управления, в котором хранится куча рабочих классов. Рабочие на самом деле являются шаблонами.Templated Class имеет круговую зависимость
#include "worker.h"
class Management {
private:
worker<type1> worker1;
worker<type2> worker2;
...
};
Проблема возникает из-за того, что шаблонные классы должны использовать Management.
Пример:
class Worker{
...
};
#include "Worker.inl"
Рабочий INL файл:
#include "Management.h" //Circular Dependency!
Worker::Worker(){
//Management is accessed here
Management mgmt1();
mgmt1.doSomething(); //Can't use that forward declaration!
}
...
Обычно вы бы вперед объявить Management.h в заголовочном файле рабочий, и назвать его в день. К сожалению, поскольку шаблон шаблонизирован, он всегда будет включен.
Я думаю, вы можете утверждать, что дизайн плох, поскольку шаблонный класс не должен быть шаблоном, если ему нужно знать такую информацию, но это то, что есть, и я должен работать с ним.
Вы также можете просмотреть этот вопрос в качестве микромира офисной жизни.
Я не думаю, что это имеет какое-либо отношение к шаблонам ... возможно, переименовать и повторно пометить? –
@Oli: Если это не имеет никакого отношения к шаблонам, то это дубликат несколько раз. –
В коде, который вы опубликовали, конструктор Worker создает объект 'Management', который содержит два' Worker ', конструктор которых вызывается и создает ... Вы уверены, что хотите это сделать? Какова реальная проблема, которую вы хотите решить? Там могут быть лучшие решения, чем подход, который вы принимаете. –