Можно ли сократить эту декларацию?

Есть ли возможность сократить это объявление, так как я очень часто использую его в своем коде

Например, я использую это для приведения Object к моему CustomObject с помощью

dynamic_cast/static_cast<TCustomClassName*>(SenderObject)

Есть ли возможность вообще сократить это, используя typedef static_cast<TCustomClassName*> или что-то вроде этого, убедившись, что это возможно, используя оператор приведения в typedef?

1

Решение

Нет, ты не можешь, а ты НЕ СЛЕДУЕТ! Не определяйте какие-либо макросы для операторов приведения, это запутает тех, кто сопровождает код вашего приложения, и вызовет хаос в ваших кругах программирования. Эти операторы существуют именно для того, чтобы предложить читателю понятный способ сообщить, что здесь происходит приведение. Независимо от того, что они используются ежедневно, это приводит к путанице между программистами, поэтому эти ключевые слова помогают им. Поэтому придерживайтесь их и используйте их с умом. Не возвращайтесь даже к приведениям в стиле C, цель этих операторов — предложить способ понимания того, что происходит в коде. Если вы не знакомы с ними, прочитайте это: Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?

10

Другие решения

Вы можете использовать шаблонные функции вместо макросов, чтобы не потерять безопасность типов:

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);
1

Используйте сочетания клавиш вашей IDE. Например, в Eclipse с помощью автозавершения кода для ввода требуется всего несколько нажатий клавиш. static_cast<MyClass*>. Если вам действительно нужно то же самое, вы можете даже определить свой собственный макрос клавиатуры, чтобы вставить шаблон через одну горячую клавишу.

0