Форум программистов, компьютерный форум CyberForum.ru

Ошибка в рекурсивном шаблоне функции - C++

Восстановить пароль Регистрация
 
msangel
 Аватар для msangel
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 13
12.05.2010, 04:39     Ошибка в рекурсивном шаблоне функции #1
Добавлено через 9 минут
C++
1
2
3
4
5
6
template <int from,int much>    int getRangeSum(){
return from+getRangeSum<from+1,much-1>();
};
template <int from>             int getRangeSum<from,0>(){
return from;
};
такой код тоже не работает, хоть должен(((

пишет
Error 1 error C2768: 'getRangeSum' : illegal use of explicit template arguments
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2010, 04:39     Ошибка в рекурсивном шаблоне функции
Посмотрите здесь:

Ошибка в шаблоне C++
C++ Ошибка в шаблоне функций
C++ Ошибка при рекурсивном вызове
C++ ошибка с типами в шаблоне функции
Ошибка в шаблоне C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.05.2010, 07:40     Ошибка в рекурсивном шаблоне функции #2
C++
1
2
3
4
template <typename T> T getRangesum(T from, T much) 
{
   return from + getRangeSum<T>(from+1, much-1); 
}
msangel
 Аватар для msangel
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 13
12.05.2010, 07:59  [ТС]     Ошибка в рекурсивном шаблоне функции #3
а условие выхода с рекурсии?

нужно сделать частичную перегрузку\специализацию шаблона при условии, что мы посчитали суму всех элементов.

также в этой строке:
C++
1
return from + getRangeSum<T>(from+1, much-1);
по сути используется та самая функция (уже инстанцирований шаблон), что и вызвал/ла его, а мне надо, чтоб в середине шаблона создавался новый шаблон с новыми параметрами(параметрами шаблона а не функции)

Добавлено через 2 минуты
все дело в том, что мне нужно воспроизвести все расчеты еще на этапе компиляции и макропрограммирование шаблонами - лучшее решение.

Добавлено через 3 минуты
а для выхода с рекурсии надо как-то (как???) сделать специализацию, когда второй параметр шаблона будет 0.

похожий пример я уже видел на соседней ветке обсуждений где считали факториал, однако там используются шаблоны классов и у них очень отличается синтаксис от шаблонов функций

Добавлено через 2 минуты
Рекурсия:написать функцию которая возвращает степень числа

вот тот пост, но там классы
msangel
 Аватар для msangel
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 13
07.07.2010, 18:42  [ТС]     Ошибка в рекурсивном шаблоне функции #4
проблема так и не решена...(
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
08.07.2010, 00:00     Ошибка в рекурсивном шаблоне функции #5
Частичная специализация функций запрещена стандартом. Допустима только полная. Простейший вариант выхода из положения - описать функцию как статический член параметризованного класса.
Кроме того, для метапрограммирования лучше не использовать функции, потому что результативность такого подхода напрямую зависит от качества оптимизатора. Далеко не факт, что он всякий раз догадается, что функция возвращает константу времени компиляции. Лучше пользоваться традиционным способом, загоняя результат в enum внутри структуры.
Yandex
Объявления
08.07.2010, 00:00     Ошибка в рекурсивном шаблоне функции
Ответ Создать тему
Опции темы

Текущее время: 23:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru