boost — вызов унаследованных функций, специфичных для класса, в переполнении стека

У меня следующая проблема. Я занят кодированием структуры наследования в 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. Я хотел бы избежать создания копий элементов и, скорее, напрямую изменять элемент в векторе.

2

Решение

Вам либо нужно опуститься до boost::shared_ptr<C> или создать виртуальную функцию в A,

Предполагая, что вы хотите понизить, вы можете использовать Boost’s функции приведения указателя:

boost::static_pointer_cast<C>(myA.back())->uniqueFunc();

(или использовать dynamic_pointer_cast<C> если вам нужна динамическая проверка типов.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]