我已获得以下代码:
struct Base
{
virtual ~Base(){};
};
template<class T>
struct Derived : public Base
{};
int main()
{
Derived<int> d;
Base *pD = &d;
if(dynamic_cast<Derived<const int>*>(pD))
{
std::cout << "const" << std::endl;
}
if(dynamic_cast<Derived<int>*>(pD))
{
std::cout << "non-const" << std::endl;
}
}
我希望两个dynamic_cast都返回一个有效的指针,因为新类型的cv资格较少。任何人都可以向我解释我失踪的是什么吗?有没有办法在给定Derived<XYZ>
指针的情况下识别Base
忽略cv限定符?
答案 0 :(得分:3)
从编译器的角度来看,Derived<int>
和Derived<const int>
与const char*
和struct MyBox
相距甚远。换句话说,他们之间没有任何关系。
答案 1 :(得分:3)
您会混淆编译器正在查看的类型。 less const 指的是类型而不是模板参数。如果你有
if(dynamic_cast<const Derived<int>*>(pD))
{
std::cout << "const" << std::endl;
}
if(dynamic_cast<Derived<int>*>(pD))
{
std::cout << "non-const" << std::endl;
}
然后两个输出都会打印出来。
something<sometype>
是完全不同的类型,然后是something<some_other_type>
,但const something<sometype>
只是const
something<sometype>
版本