【问题标题】:C++ TypeId to a constructor构造函数的 C++ TypeId
【发布时间】:2020-08-28 18:52:55
【问题描述】:

我正在尝试创建一个函数来检查对象类型是否等于参数类型,如果是,则创建新对象。 我的班级层次结构:

class Copier: public Action class CopierX: public Copier

所以我的功能是:

void Copier::checkequality(Action b) {
    if (typeid(*this) == typeid(b))
    {
        Action b = new T x; //here at 'T' i want new type type(this)
    }
}

只是我认为有必要提一下——这被提到是一个具有一些“默认值”的虚函数,所以还有另一个问题,它会像这样工作吗:

所以在这个CopierXtypeid(this) 将返回CopierX 类型对吗?然后,我想创建一些像Action b = new CopierX x; 一样工作的东西

如果我写得不好,我想说声抱歉,我对 C++ 还很陌生,我曾经在简单的 C 上工作过很多

【问题讨论】:

  • 也许你想clone对象?
  • 您将指针的类型与类对象的类型进行比较。它们永远不会相同。

标签: c++ typeid


【解决方案1】:

解决此问题的一种方法是将Action* copy() 方法添加到 Action 类并在每个后代中实现它。

另一个就是这样使用静态多态

template<typename T>
class Action {
public:
template<typename U>
void checkequality(Action<U>** b)
{
    if(std::is_same<T, U>::value) {
        *b = new T();
    }
}
};

class Copier : public Action<Copier>
{}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2011-04-03
    • 2010-12-16
    • 2015-05-25
    • 2011-04-19
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多