Я попытался проверить указатель на какой тип был принят в качестве аргумента следующим образом:Как проверить тип во время выполнения?
#include <iostream>
struct A{};
struct B:A{};
struct C:A{};
C *c = new C;
B *b = new B;
A *a = new A;
void foo (A *a)
{
if(dynamic_cast<B*>(a))
{
std::cout << "Type is B*" << std::endl;
//cannot dynamic_cast 'a' (of type 'struct A*') to type 'struct B*' (source type is not polymorphic)
}
if(dynamic_cast<C*>(a))
{
std::cout << "Type is C*" << std::endl;
//cannot dynamic_cast 'a' (of type 'struct A*') to type 'struct C*' (source type is not polymorphic)
}
}
Но даже не компилировать. Можно ли это сделать? Я имею в виду, чтобы определить, какой указатель на какой тип мы передали как аргумент функции?
Вам нужна хотя бы одна функция 'virtual' в' A', проще всего объявить виртуальный деструктор. –
@ πάνταῥεῖ Зачем? Как виртуальная функция помогает мне определить тип во время выполнения? Не вижу этого ... –
В этом случае компилятор создает vtable, что необходимо для 'dynamic_cast'. –