Пытаясь реализовать функцию точечного произведения с использованием шаблонов, я написал следующую шаблонную функцию.Частичный typedef (`использование`) шаблонной функции
template <typename T, typename R = float,
typename =
std::enable_if_t<std::is_arithmetic<decltype(std::declval<T>().x)>{}>,
typename =
std::enable_if_t<std::is_arithmetic<decltype(std::declval<T>().y)>{}>>
constexpr R dot(const T a_vector, const T b_vector)
{
return a_vector.x * b_vector.x + a_vector.y * b_vector.y;
}
Я хочу, чтобы мои пользователи также легко использовать функцию dot
возвращает double
вместо значения по умолчанию float
. Вот почему я использую using
для «typedef» dot()
.
template<typename T, typename R, typename ... >
using dotd = dot<T, double>;
Этот код дает
- в г ++
error: ‘dot<T, float>’ does not name a type
- в звоном ++
error: expected a type
иerror: expected ';' after alias declaration
Есть ли у меня возможность использовать в alternat ive для функций?
Тип псевдонима может быть создан только для __types__. Функция не является типом. –
@ Данди, да, да! :) Посмотрите на мой ответ. – SergeyA
Вы еще не используете 'R' ... Вы имели в виду использовать' constexpr R dot (...) '? –