В C ++ у меня есть определенная функция шаблона, которая при заданном условии вызывает функцию шаблона в другом классе.Проблема заключается в том, что другому классу требуется полное определение первого класса, поскольку он создает второй класс и сохраняет их и управляет ими аналогичным образом.
Проблема в том, что, естественно, они выпадают какодин класс, и, следовательно, имеет тесное взаимодействие, за исключением того, что мне нужно, чтобы они были двумя классами по причинам многопоточности.В некотором роде, master для всех потоков, по одному дочернему элементу в системе.
Любой совет, как это можно реализовать?
Edit @ comment: у меня проблема, которая выглядит немногоthis:
class Master {
public:
Child* CreateChild() {
return new Child();
}
template<typename T> T* GetSomething(int arg) {
return NULL;
}
};
class Child {
Master* master;
template<typename T> T* GetSomething(int arg) {
if (arg) return master->GetSomething<T>(arg);
else return NULL;
}
};
Это, очевидно, не фактические реализации, но достаточно похожие для демонстрации.PIMPL поможет, только если это не шаблонные функции, но так как они есть, то IMPL должен быть прямо здесь.
Мастер-класс управляет всеми детьми (почему я выбрал Master и Child вместо Parent/ Ребенок или Мастер / Раб?), Их память, время жизни и т. Д., И некоторые другие общесистемные потребности.Но класс Child обеспечивает большую часть доступа, и в некоторых случаях он должен возвращаться к мастер-классу.
Кроме того, в аду нет никакой возможности перейти к динамическим привязкам.Остальная часть моей системы уже полностью злоупотребляет динамическими привязками до абсолютного максимума, и я просто не могу позволить себе использовать их снова таким образом.Рассматриваемая функция Child вызывается очень, очень, очень часто.