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

Параметры шаблонов функции по умолчанию - C++

Восстановить пароль Регистрация
 
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 15:53     Параметры шаблонов функции по умолчанию #1
есть функция
C++
1
2
3
4
5
6
7
8
9
  template<class T>
  T sum(valarray<T> x, size_t left = 0, size_t right = 0){
    T result = 0;
    if(right == 0) right = x.size() - 1; 
    for(size_t i = left; i<=right; i++){
      result += x[i];
    }
    return result;
  }
как сделать что бы при вызове функции по умолчанию вместо T был double ?
в Страуструпе смотрел там написано что вроде как надо писать
C++
1
  template<class T =double>
но компилятор ругается
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 15:53     Параметры шаблонов функции по умолчанию
Посмотрите здесь:

Параметры функции по умолчанию C++
Параметры по умолчанию в С. C++
ODBC, параметры по умолчанию C++
C++ Указатель на функцию и параметры по умолчанию
C++ Параметры по умолчанию в функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.09.2013, 15:58     Параметры шаблонов функции по умолчанию #2
Никак. Тип шаблонной функции или явно указывается рядом с именем, или явно выводится из типов переданных аргументов. Тип по умолчанию можно задать только для шаблонных классов. Преобразуйте массив руками в double.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 15:58     Параметры шаблонов функции по умолчанию #3
Цитата Сообщение от MAnton Посмотреть сообщение
в Страуструпе смотрел там написано что вроде как надо писать
надо самому писать
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.09.2013, 18:30     Параметры шаблонов функции по умолчанию #4
Цитата Сообщение от MAnton Посмотреть сообщение
как сделать что бы при вызове функции по умолчанию вместо T был double ?
А что это даст?
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 19:13  [ТС]     Параметры шаблонов функции по умолчанию #5
я делаю функцию шаблонной, что бы она была более гибкой, но пользоваться буду в основном для double, и чтобы каждый раз на писать
C++
1
sum<double>()
хочу сделать по умолчанию
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.09.2013, 19:16     Параметры шаблонов функции по умолчанию #6
Цитата Сообщение от MAnton Посмотреть сообщение
чтобы каждый раз на писать
А зачем писать <double>? Он же из параметров выведется.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.09.2013, 19:17     Параметры шаблонов функции по умолчанию #7
MAnton, выведется из аргумента же
C++
1
2
std::valarray<double> array;
sum(array);
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 19:38  [ТС]     Параметры шаблонов функции по умолчанию #8
хм... точно, спасибо

Добавлено через 10 минут
а почему если написать
C++
1
2
3
4
5
std::valarray<double> array;
 
/*инициализация array*/
 
sum(array-0.4);
то выдаст ошибку,
а если
C++
1
2
3
4
5
std::valarray<double> array;
 
/*инициализация array*/
 
sum<double>(array-0.4);
то нет? Ведь тип тот же самый
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.09.2013, 19:43     Параметры шаблонов функции по умолчанию #9
А что такое
Цитата Сообщение от MAnton Посмотреть сообщение
array-0.4
по Вашему мнению?
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 19:44  [ТС]     Параметры шаблонов функции по умолчанию #10
это valarray<double>, разве нет?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.09.2013, 19:53     Параметры шаблонов функции по умолчанию #11
Цитата Сообщение от MAnton Посмотреть сообщение
то valarray<double>, разве нет?
Всё верно Просто я с std::valarray почти не работал. Смутило вычитание значения из массива.
У Вас какая среда? В VS12 всё собирается успешно.
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 20:01  [ТС]     Параметры шаблонов функции по умолчанию #12
g++ 4.6.3
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
22.09.2013, 20:18     Параметры шаблонов функции по умолчанию #13
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Тип по умолчанию можно задать только для шаблонных классов
в С++98 double типом по умолчанию быть не может, а в С++ может, так к слову
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 22:39     Параметры шаблонов функции по умолчанию
Еще ссылки по теме:

Оптимизация. Перегрузки vs параметры по умолчанию C++
C++ Параметры функции по умолчанию
C++ Параметры по-умолчанию в виртуальных функциях

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.09.2013, 22:39     Параметры шаблонов функции по умолчанию #14
Цитата Сообщение от MAnton Посмотреть сообщение
g++ 4.6.3
Кстати, gcc 4.8.1 тоже не может вывести тип. Можно обмануть вот так:
C++
1
2
3
4
double sum(std::valarray<double> x, size_t left = 0, size_t right = 0)
{
   return sum<double>( x, left, right );
}
http://ideone.com/dxbz6Z
Yandex
Объявления
23.09.2013, 22:39     Параметры шаблонов функции по умолчанию
Ответ Создать тему
Опции темы

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