這裏之間拘泥是一些代碼:++多態類型用C
#include <typeinfo>
#include <assert.h>
#include <vector>
class Super {};
class Sub1 : public Super {};
class Sub2 : public Super {};
int main() {
std::vector<Super*> vec;
vec.push_back(new Sub1);
vec.push_back(new Sub2);
assert(typeid(vec[0]) == typeid(vec[1]));
assert(typeid(vec[0]) != typeid(vec[1]));
}
不幸的是,第一斷言通過,和第二不。我對這一結果並不感到驚訝,但能夠以這種方式辨別類型本來就不錯。
我(有點hackish的)解決方法:
#include <typeinfo>
#include <assert.h>
#include <vector>
enum SubTypeEnum {
Sub1_T,
Sub2_T
};
class Super {
SubTypeEnum _type;
public:
Super(SubTypeEnum __type) : _type(__type) {}
SubTypeEnum type() { return _type; }
};
class Sub1 : public Super {
public:
Sub1() : Super(Sub1_T) {}
};
class Sub2 : public Super {
public:
Sub2() : Super(Sub2_T) {}
};
int main() {
std::vector<Super*> vec;
vec.push_back(new Sub1);
vec.push_back(new Sub2);
assert(vec[0]->type() != vec[1]->type());
assert(vec[0]->type() == vec[1]->type());
}
這將產生期望的結果,但看起來凌亂。有沒有更好的方法來找出我正在處理的類型?
我以爲你失蹤了'*'對第二個斷言的兩個論點? – 2013-04-08 03:57:22