У меня следующая проблема. Я занят кодированием структуры наследования в C ++. Вкратце, это то, что я пытаюсь сделать. Класс A является базовым классом, а классы B и C являются унаследованным классом. Классы B и C имеют разные и уникальные функции-члены.
Теперь, используя библиотеку интеллектуальных указателей boost, я делаю вектор общего указателя типа A следующим образом:
class A{
A();
virtual print();
}
class B : public A{
B();
virtual print();
}
class C{
C();
virtual print();
void uniqueFunc();
}
int main(){
vector<shared_ptr<A> > myA;
shared_ptr<B> myB;
shared_ptr<C> myC;
myA.push_back(myB);
myA.push_back(myC);
}
Теперь у меня есть метод для проверки типа членов в векторе. Это не проблема. У меня вопрос, как я могу вызвать uniqueFunc для члена класса типа C в векторе. Должен ли я быть удрученным? Или я должен создать виртуальную функцию. Однако мне нужно, чтобы uniqueFunc был уникальным для класса C. Я хотел бы избежать создания копий элементов и, скорее, напрямую изменять элемент в векторе.
Вам либо нужно опуститься до boost::shared_ptr<C>
или создать виртуальную функцию в A
,
Предполагая, что вы хотите понизить, вы можете использовать Boost’s функции приведения указателя:
boost::static_pointer_cast<C>(myA.back())->uniqueFunc();
(или использовать dynamic_pointer_cast<C>
если вам нужна динамическая проверка типов.)
Других решений пока нет …