如果我理解正确的话,typeid可以决定多态性中的实际类型,而typeof不能。
它们的返回是否也用于不同的目的: typeof的返回用作可以定义变量的type关键字,而typeid的返回则不能?
有没有办法既获得多态性的实际类型,又使用return as type关键字来定义另一个变量?我希望从指向基类的指针获取派生类类型,并定义派生类的变量或指针。类似于:
baseclass *p = new derivedclass
typexxx(*p) *pp = dynamic_cast<typexxx(*p) *> (p);
// would like to convert the pointer from pointing to a base class
// to its derived class非常感谢!
发布于 2010-01-01 06:07:14
c++0x将拥有decltype,它可以像这样使用:
int someInt;
decltype(someInt) otherIntegerVariable = 5;但对于普通的c++来说,不幸的是,没有。
我认为decltype也不会有多大帮助,因为您需要的是多态类型,而不是声明的类型。做你想做的事情的最直接的方法是尝试动态转换为一个特定的类型并检查NULL。
struct A {
virtual ~A() {}
};
struct B : public A {};
struct C : public A {};
int main() {
A* x = new C;
if(B* b_ptr = dynamic_cast<B*>(x)) {
// it's a B
} else if(C* c_ptr = dynamic_cast<C*>(x)) {
// it's a C
}
}发布于 2010-01-01 06:44:13
假设层次结构A <- B <- C
A * p = new AorBorC; // create new object of some sort
if ( dynamic_cast <C*>(p) ) {
C * c = dynamic_cast <C*>(p);
c->CFunc();
}
else if ( dynamic_cast <B*>(p) ) {
B * b = dynamic_cast <B*>(p);
b->BFunc();
}
else if ( dynamic_cast <A*>(p) ) {
A * a = dynamic_cast <A*>(p);
a->AFunc();
}其中AFunc、BFunc、CFunc特定于它们各自的类,而不是虚拟的。显然,这在某种程度上是可以优化的。
https://stackoverflow.com/questions/1987286
复制相似问题