Целью следующего кода было создание версии std::max(), позволяющей вводить сколь угодно большое количество аргументов.
На поставленный здесь вопрос был дан ответ путем решения ошибки, указанной @tkausl в комментариях.
Я разработал следующий код не только для решения проблемы, но и в качестве практического примера рекурсии шаблона на будущее. проекты:
(скомпилированы на C++ 23 с использованием g++, MinGW-W64 x86_64, версия 13.1.0, в операционной системе Windows 11).
Код: Выделить всё
#include
#include
// base cases
template
auto multi_max(T1 first, T2 second, Args_a... args_a)
{
if constexpr (sizeof...(args_a) == 0)
{
return 0;
}
if constexpr(sizeof...(args_a) == 1)
{
return static_cast (first);
}
if constexpr(sizeof...(args_a) == 2)
{
return static_cast (std::max(first, second));
}
else
{
return static_cast (multi_max(std::max(first, second) , (args_a)...));
} }
// recursion code
template
auto multi_max(Args_a... args_a)
{
auto answer = multi_max(args_a...);
return static_cast (answer);
}
Код: Выделить всё
// printing result, test 1
int main()
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79857205/template-recursion-stops-after-7-recursions-c[/url]
Мобильная версия