我正在处理碰撞系统,我需要复制实体的碰撞器。
我制作了这样的系统,例如我不需要设置我想要处理碰撞的方式,(我将开始使用AABB,但可能会更改为SAT)但我需要进行深层复制我将使用哪个算法的碰撞器。
一方面,深层复制是一项要求,复制和交换习惯似乎是我应该去的。
另一方面,我的collidable
不需要是接口以外的任何东西,所以没有理由不做纯虚拟。
class collidable
{
public:
virtual collidable& operator= (collidable other)=0;
};
但我无法复制构造collidable
,因为它是纯虚拟的。
注意,在同一个程序中,我永远不会同时使用多个碰撞算法,因此不会出现方法冲突。
如果不是设计方面或技术方面,我真的不知道自己做错了什么,所以我完全接受建议。
如何强制派生出collidable的类来实现operator =?
答案 0 :(得分:1)
您可能会混淆接口与类实现的使用。这可能是因为纯虚拟类是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 = for each algorithm。没有operator = defined的算法实现将无法链接。