【问题标题】:Compare 2 derived objects of base class比较基类的 2 个派生对象
【发布时间】: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_ptrstd::weak_ptr
  • 您能否详细说明 'compare' 的确切含义?您想知道一个对象是否属于特定类型,还是想比较两个不同类型的对象?

标签: c++ class compare derived-class base-class


【解决方案1】:
#include <typeinfo>

void Collision()
{
    if (typeid(obj[x][y]) != typeid(B) && typeid(obj[x][y]) != typeid(C)) 
        doStuff();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多