【发布时间】:2023-03-26 13:22:01
【问题描述】:
我正在开发一个自定义引擎,其中有 2 个不同的变换类,一个用于 2D,一个用于 3D。我正在使用#define 来选择要使用的转换类,并在逻辑应该相同的地方使用该定义而不是类名。我现在正处于一个我希望他们有不同逻辑的部分,并想做一个比较以为此分支。 我需要做什么才能让它工作?
class Transform2D;
class Transform3D;
#define TransformClass Transform2D
if(TransformClass == Transform2D)
{
//like this
}
else
{
//like that
}
类型 id 可以做到这一点。你是怎么处理的?
if ( typeid(TransformClass) == typeid(Transform2D) )
{
ittransform->SetRotation(0);
ittransform->SetScale(Vector2D(defaultScale, defaultScale));
}
else
{
ittransform->SetRotation(Vector3f());
ittransform->SetScale(Vector3f(defaultScale, defaultScale, defaultScale));
}
【问题讨论】:
-
这种类型检查通常表明架构/类设计不佳。要么使用重载函数,比如 Sean 建议的,要么定义一个由 transform2D 或 transform3D 实现的顶级接口类
-
而不是 #define 只是让你的函数成为一个模板,使用 Sean 建议的通用接口对 Transform2D/3D 类进行操作。
标签: c++ architecture component-based