【发布时间】:2013-12-26 01:46:00
【问题描述】:
我有这样的事情:
class A
{
public:
A();
~A();
};
class B : public A
{
//stuff
};
class C : public A
{
//stuff
};
class D : public A
{
//stuff
};
void Collision()
{
//obj is a multidimensional array of class A that stores objects from class B, C and D
if(obj[x][y] != B && obj[x][y] != C) //type name is not allowed
doStuff();
}
我收到错误:类型名称不允许
我知道不应该像这样比较对象,但我不知道该怎么做。
【问题讨论】:
-
如果
obj是一个多态对象数组,而不是指向多态对象的指针,那么你已经处于一个痛苦的世界。 -
obj 是这样定义的:A ***obj
-
这可能就是你要找的stackoverflow.com/questions/351845/…
-
那你就没事了。我推荐使用
std::vector<std::vector<std::vector<std::unique_ptr<A>>>>。如果数组的大小是固定的,请将std::vector替换为std::array。酌情将std::unique_ptr替换为std::shared_ptr或std::weak_ptr。 -
您能否详细说明 'compare' 的确切含义?您想知道一个对象是否属于特定类型,还是想比较两个不同类型的对象?
标签: c++ class compare derived-class base-class