У меня есть шаблон структуры, который принимает два типа (T
и S
), и в какой-то момент использует static_cast
для преобразования из одного типа в другой. Часто бывает, что T
и S
являются одним и тем же типом.
Упрощенный пример настройки:
template <typename T, typename S = T>
struct foo
{
void bar(T val)
{
/* ... */
some_other_function(static_cast<S>(val));
/* ... */
}
};
В случае, когда S
является тем же классом, что и T
, имеет или может static_cast
вводить дополнительные служебные данные, или это нулевая операция, которая всегда будет игнорироваться?
Если он вводит накладные расходы, есть ли простой трюк метапрограммирования шаблона, чтобы выполнить static_cast
только при необходимости, или мне нужно создать частичную специализацию, чтобы справиться с тегом T == S
? Я предпочел бы избежать частичной специализации всего шаблона foo
, если это возможно.