2013-06-17 5 views
0

Предположим, мне не нравится имя оператора static_cast и вы хотите его обернуть в функцию с другим именем, скажем fancy_static_cast, но отлично сохраняя семантику. Как я должен это делать? Более конкретно static_cast принять его аргумент по значению или по ссылке? Или это зависит от выражения аргумента? Должен ли я предоставить несколько перегрузок или что-то вроде этого сделает трюк?Пересылка аргумента static_cast

template <typename To, typename From> 
To fancy_static_cast(From&& from) 
{ 
    return static_cast<To>(std::forward<From>(from)); 
} 
+0

['static_cast'] (http://en.cppreference.com/w/cpp/language/static_cast) не является функцией, это специальное ключевое слово компилятора, которое полностью обрабатывается компилятором во время компиляции. –

+0

@JoachimPileborg Я никогда не говорил, что это функция, и это не директива компилятора. 'static_cast' является оператором. Но как это важно в любом случае? –

+2

@yurikilochek Операторы не имеют семантики функций - они не принимают аргументы «по значению» или «по ссылке». Они определяются в терминах l-значений и r-значений и могут очень содержать логику типа «если это конкретное значение l, то ..., иначе рассматривайте его как r-значение ...» – Angew

ответ

0

Пусть мне не нравится имя static_cast оператора и хотите, чтобы обернуть его в функции с другим именем, скажем fancy_static_cast, но совершенно сохранение семантики. Как я должен это делать?

Вы не должны.

Вместо этого, вы сказатьstatic_cast когда вы значитstatic_cast. В противном случае вы достигнете лишь недостаточной ремонтопригодности: читатели вашего кода сначала не узнают static_cast, и когда они будут смотреть на функцию, у них не будет никакой идеи, почему вы сделали это и потратили мозг просто, чтобы понять, что вы делать практически ничего.

Будьте четкими и четкими с вашим кодом. Скажите, что вы имеете в виду, не обманывайте читателей (включая себя) чрезмерной фантазией. Не используйте вводящие в заблуждение имена, вместо этого старайтесь использовать те части языка, которые каждый знает наизусть. Дайте себе и другим как можно меньше возможностей понять, что вы написали.

Смежные вопросы