C++ C++;构造函数的类型ID

C++ C++;构造函数的类型ID,c++,typeid,C++,Typeid,我试图创建一个函数来检查对象的类型是否与参数的类型相等,如果相等,则创建新对象。 我的类层次结构: 类复印机:公共行动 class复印机X:公共复印机 所以我的功能是: void Copier::checkequality(Action b) { if (typeid(*this) == typeid(b)) { Action b = new T x; //here at 'T' i want new type type(this) } } 只是我认为有

我试图创建一个函数来检查对象的类型是否与参数的类型相等,如果相等,则创建新对象。 我的类层次结构:

类复印机:公共行动
class复印机X:公共复印机

所以我的功能是:

void Copier::checkequality(Action b) {
    if (typeid(*this) == typeid(b))
    {
        Action b = new T x; //here at 'T' i want new type type(this)
    }
}
只是我认为有必要提及-这是一个具有一些“默认值”的虚拟函数,所以还有另一个问题,它是否会这样工作:

因此,在这个
CopierX
typeid(this)
将返回
CopierX
type right?,然后,我想创建一个类似
Action b=new CopierX


我想说对不起,如果我写得不好,我对C++是相当新的,我以前在简单的c

< p>上做了很多工作。一种解决方法是把代码>动作*()(<代码> >方法添加到动作类中,并在每个后代中实现它。

另一种是像这样使用静态多态性

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>
{}
模板
集体诉讼{
公众:
模板
无效检查相等(操作**b)
{
if(std::is_same::value){
*b=新的T();
}
}
};
类复制者:公共行动
{}

解决这个问题的一种方法是向Action类添加
Action*copy()
方法,并在每个子体中实现它

另一种是像这样使用静态多态性

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>
{}
模板
集体诉讼{
公众:
模板
无效检查相等(操作**b)
{
if(std::is_same::value){
*b=新的T();
}
}
};
类复制者:公共行动
{}

也许您想要创建对象?您正在将指针的类型与类对象的类型进行比较。它们永远不会是相同的。也许你想创建一个对象?你正在比较指针的类型和类对象的类型。他们永远不会是原来的样子。