Предположим, мне не нравится имя оператора 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));
}
['static_cast'] (http://en.cppreference.com/w/cpp/language/static_cast) не является функцией, это специальное ключевое слово компилятора, которое полностью обрабатывается компилятором во время компиляции. –
@JoachimPileborg Я никогда не говорил, что это функция, и это не директива компилятора. 'static_cast' является оператором. Но как это важно в любом случае? –
@yurikilochek Операторы не имеют семантики функций - они не принимают аргументы «по значению» или «по ссылке». Они определяются в терминах l-значений и r-значений и могут очень содержать логику типа «если это конкретное значение l, то ..., иначе рассматривайте его как r-значение ...» – Angew