如何正确制作抽象类的深拷贝?
How to correctly make deep copy for abstract classes?
我正在研究一个碰撞系统,我需要复制实体的碰撞体。
我使系统,例如我不必一成不变地处理碰撞,(我可能会开始使用AABB,但可能会更改为SAT),但是无论我将使用哪种算法,我都需要对碰撞机进行深度复制。
一方面,深拷贝是要求,抄袭换成语似乎是我应该去的。
另一方面,我的collidable
不需要是界面以外的任何东西,所以没有理由不做纯虚拟。
因此,我首先写了这个:
class collidable
{
public:
virtual collidable& operator= (collidable other)=0;
};
但我无法复制构造collidable
因为它是纯虚拟的。
请注意,在同一程序中,我永远不会同时使用多个碰撞算法,因此不会有方法冲突。
我真的不知道我做错了什么,无论是设计方面还是技术方面,所以我完全愿意接受建议。
如何强制可碰撞派生的类来实现运算符= ?
您可能混淆了接口与类实现的使用。 这可能是因为纯虚拟类是C++定义接口的方式。
通过您的实现,您不会有太多运气,因为您将获得以下类型的方案:
class A : public collidable
{
...
}
class B : public collidable
{
...
}
int main (int argc, char** argv)
{
collidable *A = new A ();
collidable *B = new B ();
*A = *B;
...
}
这显然是一个问题。 您要做的是定义适用于接口中每个不同算法实现的泛型操作。 赋值可能不是这些泛型操作之一,因为赋值需要使用两个相同的类型来完成。
如果您只使用您所说的一种算法类型,请将每个算法类的使用者类设置为模板化类。 然后,当您对算法实现进行操作并在每个算法类上调用 operator= 时,编译器应在链接期间为每个算法实现强制 operator=。 未定义 operator= 的算法实现根本无法链接。
相关文章:
- 无法创建抽象类的实例
- 用pybind11包装C++抽象类时出错
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 抽象类错误,请参阅声明" "是抽象的
- 将自定义函数传递到基抽象类中以延迟执行
- 将包含抽象类和普通类C++包导出到 Python
- 与浅拷贝构造函数和深拷贝构造函数混淆
- C++:处理抽象类中的错误时出现问题
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 在 C++ 中使用另一个头文件中的抽象类
- ATL::CComContainedObject<contained>: C2259 无法实例化抽象类
- C++:从抽象类重写纯虚拟运算符重载
- 如何创建shared_ptr抽象类的容器
- .h 或.cpp文件中的抽象类或两者兼而有之?
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- E0322:不允许使用抽象类类型 " " 的对象
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 提升 - 类没有名为"序列化"的成员(抽象类)?
- 如何正确制作抽象类的深拷贝?