Предположим, мне не нравится имя static_cast
оператор и хотите обернуть его в функцию с другим именем, скажем, fancy_static_cast
но прекрасно сохраняя семантику. Как я должен это делать? Более конкретно делает static_cast
принять его аргумент по значению или по ссылке? Или это зависит от выражения аргумента? Должен ли я обеспечить несколько перегрузок или что-то подобное поможет?
template <typename To, typename From>
To fancy_static_cast(From&& from)
{
return static_cast<To>(std::forward<From>(from));
}
Предположим, мне не нравится имя оператора static_cast, и я хочу обернуть его в функцию с другим именем, скажем, fancy_static_cast, но прекрасно сохраняющую семантику. Как я должен это делать?
Ты не должен.
Вместо этого вы сказать static_cast
когда ты имею в виду static_cast
, В противном случае вы достигнете только недостатка в поддержке: читатели вашего кода сначала не распознают static_cast
и когда они смотрят на функцию, они не понимают, почему, черт возьми, вы это сделали, и тратите мозги, просто чтобы понять, что вы по сути ничего не делаете.
Будьте ясны и четки с вашим кодом. Скажите, что вы имеете в виду, не вводите читателей в заблуждение (включая вас самих) чрезмерной фантазией. Не используйте вводящие в заблуждение названия, вместо этого попробуйте использовать части языка, которые все знают наизусть. Предоставьте себе и другим как можно меньше возможностей неправильно понять, что вы написали.
Других решений пока нет …