C++ 类型间转换
我有一个用于序列化数据的抽象类,如下所示C++ 类型间转换,c++,casting,abstraction,C++,Casting,Abstraction,我有一个用于序列化数据的抽象类,如下所示 template<class T> class Serialize{ public: virtual string serialize() = 0; virtual T deSerialize(string value) = 0; } 模板 类序列化{ 公众: 虚拟字符串序列化()=0; 虚拟T反序列化(字符串值)=0; } 我还有一个数据模型a class PersonModel: public
template<class T>
class Serialize{
public:
virtual string serialize() = 0;
virtual T deSerialize(string value) = 0;
}
模板
类序列化{
公众:
虚拟字符串序列化()=0;
虚拟T反序列化(字符串值)=0;
}
我还有一个数据模型a
class PersonModel: public Serialize<PersonModel> {
...
public:
...
string serialize() { return "The serialized form";}
T deSerialize(string value) {return PersonModel();}
}
class PersonModel:public序列化{
...
公众:
...
string serialize(){返回“序列化的表单”;}
T反序列化(字符串值){return PersonModel();}
}
现在我有一个通用上下文类,如下所示:
template<class T>
class DC{
private:
vector<T> data;
public:
vector<string> read(){
for each(auto i in data){
Serialize<T> *getSerializedData = dynamic_cast<Serialize<T>*>(i);
}
}
模板
DC类{
私人:
矢量数据;
公众:
向量读取(){
对于每个(自动输入数据){
Serialize*getSerializedData=dynamic_cast(i);
}
}
C++显示上述转换的以下错误:
错误C2682无法使用“dynamic_cast”将“PersonModel”转换为
“序列化*
”
如何解决这个问题?假设您将
DC
的实例声明为DC
,错误很明显:您无法将非-指针对象转换为指向该对象的指针(或指向基类的指针)
而是循环引用,实际上不需要执行任何强制转换:
for (auto& i : data){
// i is a reference which makes polymorphism work
// i also "is-a" Serialize<PersonModel> object reference due to the inheritance
i.serialize(); // Will work just fine, no casting needed
}
for(自动和输入:数据){
//我是一个参考,使多态性的工作
//由于继承,我还“是一个”序列化对象引用
i、 serialize();//工作正常,无需强制转换
}
@LogicStuff:static_cast也显示了同样的错误。问题似乎缺少一些关键信息,请创建一个并向我们展示。foreach循环的语法是什么?@JoachimPileborg不,不是,C++11 foreach循环在中没有使用kewords和。为什么人们即使在他们问的是一个编译错误?我不明白。它显示了完全相同的错误,我已经在发布问题之前尝试过了。@ Arrr它不能,除非你非法地从非指针对象中非法地指向一个指针。不要进行转换,这是不需要的。因为C++,所以它是不需要的。C++没有在高层次上有泛型约束。@ AARRR,那么问题就缺少了一些关键信息,为什么你需要抛出?你实际上在循环中做什么?@ Arrr,你肯定正在做一些你不给我们展示的东西。<代码>人物模型< /C> >是<代码>序列化< /C>,它甚至有<代码> Seri。ILITIO/C++ >函数被重写,所以如果编译器说它没有找到那个函数,那么你就做了你没有告诉我们的事情。