У вас есть один вариант: вы знаете , что у вас есть IndexElement
, а не Element
в векторе, и тогда вы можете использовать static_cast<IndexElement*>(elements[i]);
. Имейте в виду, что если у вас нет только IndexElement
, то это полностью сломается.
Если вы можете изменить b, то у вас есть другой вариант, сделав b виртуальным. Если вы не знаете, у вас может быть Element
с и IndexElement
с, и в этом случае используйте dynamic_cast<IndexElement*>(elements[i]);
и проверьте его, в результате получите nullptr
или нет. В этом случае b должен быть виртуальным (следовательно, виртуальным деструктором).
(я предполагаю, что мы находимся в Container
, поэтому прямой доступ к его членам)
Полная пробная версия (которая прекратится из-за отсутствия выделенного elements
) с измененными Элементами:
#include <vector>
using namespace std;
class Element{
public:
virtual ~Element() {}
};
class Container{
public:
vector<Elements*>elements;
};
class IndexElement: public Element{
int index;
};
int main()
{
Container aa;
static_cast<IndexElement*>(aa.elements[0]);
dynamic_cast<IndexElement*>(aa.elements[0]);
return 0;
}