У меня есть базовый класс IStructure, который является производным от многих классов.
Некоторые из этих классов ссылаются на другие IStructure классы. Например, мой класс class GuiButton : public IStructure имеет член Textstring (который также является производным от IStructure).
Сейчас я просто мелькаю, чтобы перейти к сути, так что некоторым из вас это может показаться странным. Я хотел бы иметь класс шаблона «Ссылка», который ссылается на IStructure. Например:
class GuiButton : public IStructure {
public:
Reference<Textstring> Text;
};
Я знаю, что некоторые из вас могут задаться вопросом, почему я просто не делаю Textstring* Text. Это связано с тем, что некоторые из этих ссылок являются «внешними». Класс шаблона Reference содержит только информацию о IStructure (т.е. имя и т. д.). Некоторые из этих классов безумно велики, и было бы бессмысленно создавать экземпляр всего класса только для использования свойства Name, а что нет. Имеет ли это смысл?
Итак, теперь к моему вопросу:
class Textstring : public IStructure;
Я могу сослаться на Textstring, используя свой шаблон:
Reference<Textstring> Text;
Теперь вот проблема: некоторые методы, которые у меня есть, требуют, чтобы я выполнял преобразование в IStructure, например:
void RegisterReference(Reference<IStructure> &reference);
Поэтому я не мог сделать это:
Reference<Textstring> txt("TextName");
RegisterReference(txt); // error
Я знаю, что могу вылечить это, если Reference не будет шаблоном, но мне бы очень хотелось, потому что это облегчает понимание и знание типа ссылки.
Какими способами я могу это сделать?
Спасибо за вашу помощь!
-Алекс