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

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

Например, я использую это для приведения 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);
};

Но это делает ваш код менее читабельным.

Другие вопросы по тегам