#c #templates #c 17 #variadic-templates #variadic-functions
Вопрос:
Я пишу constexpr
функцию продукта с переменными аргументами. Я смог получить только «Версию 1», работающую ниже. При попытке скомпилировать «Версию 2» я получаю сообщение об ошибке Тип содержит нерасширенный пакет параметров «data_type». Кто-нибудь может объяснить, почему это так?
/** Version 1. */
template <typename data_type, typename ...data_types>
constexpr data_type Product1(data_type _first, data_types ..._rest) // This code compiles :)
{
return _first*(_rest * ...);
}
/** Version 2. */
template <typename ...data_type>
constexpr data_type Product2(data_type ..._rest) // This code does not compile :(
{
return (_rest * ...);
}
Ответ №1:
Измените тип возврата на автоматический, тип данных является пакетом и не может использоваться в качестве типа возврата
template <typename ...data_type>
constexpr auto Product2(const data_typeamp; ..._rest)
{
return (_rest * ...);
}
int main()
{
constexpr auto p = Product2(1, 2, 3);
return 0;
}
Комментарии:
1. Потрясающе, большое спасибо! Порядок во вселенной восстановлен 😀