更新1:
更正了胡说八道的代码!感谢您的评论,我对第一个片段进行了哈希处理,哎呀。
更新 2:
还更新了问题标题,因为已指出答案没有必要使用 dynamic_cast。
我在这里想要实现的是使用强类型的深层副本;我希望能够将 Class2 复制到 Class2 的另一个实例;但是,我也想使用基础 Class1 中的 CopyTo 函数。这个想法来自我的 C# 经验,通常我只是将返回类型设为通用(参见 C# 片段)。
void Class1::CopyTo(Class1 *c1)
{
// Write data in to c1 from this instance.
c1->exampleData = exampleData;
}
// Class2 inherits Class1
Class2 *Class2::Copy()
{
Class2 *c2a = new Class2();
CopyTo(c2a);
Class2 *c2b = dynamic_cast<Class2*>(c2a);
return c2a;
}
这就是我在 C# 中的方式:
public class Class1
{
T Copy<T>()
where T : Class1
{
/* Can't remember the best way to do this in C#;
* basically if T was Class2 this would need to create
* a new instance of that class, and the same goes for
* Class1. */
T copy = createNewInstance();
// Copy the data from this to 'copy'.
copy.exampleData = exampleData;
return copy;
}
}
现在,与 C# 片段相比,C++ 片段感觉很臭。是否可以在没有指针的情况下执行此操作,或者这种方式是最佳实践?