Я работаю над настраиваемым движком, где у меня есть 2 разных класса преобразования, один для 2D и один для 3D. Я использую #define, чтобы выбрать, какой класс преобразования использовать и использовать это определение вместо имени класса в тех местах, где логика должна быть одинаковой. Сейчас я нахожусь в роли, где хочу, чтобы у них была другая логика, и я хотел сделать сравнение, чтобы отделить это. Что мне нужно сделать, чтобы заставить это работать?Сравнение типов в C++
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));
}
Этот тип проверки типа обычно является показателем плохой архитектуры/класса. Либо используйте перегруженные функции, как предложил Шон, или определите класс интерфейса верхнего уровня, который реализуется либо преобразованием2D, либо transform3D. – glampert
Вместо #define просто создайте свою функцию шаблоном, который работает на обоих классах Transform2D/3D, используя общий интерфейс, такой как Sean предложил. – JarkkoL