Я хочу иметь возможность объявлять тип класса в зависимости от использования. Например, возьмем трехэтапный конвейер, который имеет 3 очереди, соединяющие их вместе. Я хочу убедиться, что я правильно соединяю ступени с очередями (например: очереди идут в правильном направлении, в правильные единицы и т. Д.)
Вот чрезвычайно упрощенный пример того, что я пытаюсь выполнить:
template<class in, class out>
class Fifo: public queue{};
class Stage1; class Stage2; class Stage3;
class Stage1{
Fifo<Stage1,Stage2>* m_fifoOut;
};
class Stage2{
Fifo<Stage1,Stage2>* m_fifoIn;
Fifo<Stage2,Stage3>* m_fifoOut;
};
class Stage3{
Fifo<Stage2,Stage3>* m_fifoIn;
};
Есть ли более подходящий способ добиться этого функционально? Во время компиляции желательно знать, что очереди были неправильно настроены. Однако меня беспокоит, что использование шаблона создает ненужные копии классов.