Можно ли сократить эту декларацию?
Есть ли возможность сократить это объявление, так как я очень часто использую его в своем коде
Например, я использую это для приведения Object
к моему CustomObject
с помощью
dynamic_cast/static_cast<TCustomClassName*>(SenderObject)
Есть ли возможность вообще сократить это, используя typedef static_cast<TCustomClassName*>
или что-то вроде этого, убедившись, что это возможно, используя оператор приведения в typedef
?
3 ответа
Нет, вы не можете, и вы не должны! Не определяйте какие-либо макросы для операторов приведения, это запутает тех, кто сопровождает код вашего приложения, и вызовет хаос в ваших кругах программирования. Эти операторы существуют именно для того, чтобы предложить читателю понятный способ сказать, что здесь происходит приведение. Независимо от того, что они используются ежедневно, это приводит к путанице между программистами, поэтому эти ключевые слова помогут им. Поэтому придерживайтесь их и используйте их с умом. Не возвращайтесь даже к приведению в стиле C, цель этих операторов - предложить способ понимания того, что происходит в коде. Если вы не знакомы с ними, прочитайте следующее: Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?
Вы можете использовать шаблонные функции вместо макросов, чтобы не потерять безопасность типов:
template<typename InputType, typename ReturnType>
void SCast(InputType Input, ReturnType &Ret)
{
Ret = static_cast<ReturnType>(Input);
}
template<typename InputType, typename ReturnType>
void DCast(InputType Input, ReturnType &Ret)
{
Ret = dynamic_cast<ReturnType>(Input);
}
template<typename InputType, typename ReturnType>
void RCast(InputType Input, ReturnType &Ret)
{
Ret = reinterpret_cast<ReturnType>(Input);
}
Тогда вы можете использовать их так:
TCustomClassName *cls;
SCast(SenderObject, cls);
,
TCustomClassName *cls;
DCast(SenderObject, cls);
,
TCustomClassName *cls;
RCast(SenderObject, cls);
Используйте сочетания клавиш вашей IDE. Например, в Eclipse, через завершение кода, требуется всего пара нажатий клавиш для ввода static_cast<MyClass*>.
Если вам действительно нужно то же самое, вы можете даже определить свой собственный макрос клавиатуры, чтобы вставить шаблон через одну горячую клавишу.
Это возможно так:
auto ToUi16 = [](auto v)
{
return static_cast<unsigned __int16>(v);
};
Но это делает ваш код менее читабельным.