Возможно ли то, чего я пытаюсь достичь. Это проблема:
class Content{};
class Content1 : public Content{};
class Content1_1 : public Content1{};
class Content1_2 : public Content1{};
class Content2 : public Content{};
class Content2_1 : public Content2{};
class Content2_2 : public Content2{};
class Container{
public:
Content* c;
};
Можно ли определить, указывает ли указатель класса Container
на объект класса Content1
или на объект класса, производного от Content1
?
Спасибо.
ИЗМЕНИТЬ:
Если я ищу тип указателя в классе container
, он рассматривается как тип content
, хотя на самом деле это может быть тип content1
или content2
, поэтому dynamic_cast не работает.
class content{};
class content1 : public content{};
class content2 : public content{};
class container{
public:
content* c;
};
int main(void)
{
container* x = new container;
x->c = new content2;
if( dynamic_cast<content1*>((content1*)x->c) == NULL){
//This doesn't fail, eventhough 'content1' and 'content2' shouldn't be compatible.
//This means that every class, derived from 'content' will be treated as 'content1' when using dynamic_cast.
}
return 0;
}
Base
? - person ashgkwd   schedule 30.03.2013if( dynamic_cast<content1*>(x->c) == NULL)
, а неif( dynamic_cast<content1*>((content1*)x->c) == NULL)
- person Andy Prowl   schedule 30.03.2013