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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
#1

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

22.09.2013, 15:53. Просмотров 578. Ответов 13
Метки нет (Все метки)

есть функция
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>
но компилятор ругается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 15:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Параметры шаблонов функции по умолчанию (C++):

Параметры по умолчанию в функции - C++
Всем привет. Есть такой класс: template &lt;typename T&gt; class MyClass { public: MyClass(T *_beg, T *_en):beg(_beg),en(_en) {} ...

Параметры функции по умолчанию - C++
Приветствую всех! Уважаемые эксперты С++, подскажите, значения параметров по умолчанию должны задаваться в прототипе или в реализации...

Параметры функции по умолчанию - C++
Можно ли в качестве параметра по умолчанию указать элимент класса ? Хотелось бы сделать как то так char* SendMessage(char*...

Стек, использующий шаблонные параметры шаблонов - C++
Написал такое чудо template &lt;typename T, template &lt;typename E, typename Alloc=allocator&lt;E&gt;&gt; class Conter=deque&gt; class Stackk{ ...

Параметры по умолчанию в С. - C++
Всем привет! Захотел воспользоватся параметрами по умолчанию в си-шном проекте. И получил следующие ошибки: Действительно данный...

ODBC, параметры по умолчанию - C++
Доброго утра! Хочу на ПК програмно прописывать источники ODBC. Пример абстрактного, работающего кода. Это некий копи паст - так что не...

13
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.09.2013, 15:58 #2
Никак. Тип шаблонной функции или явно указывается рядом с именем, или явно выводится из типов переданных аргументов. Тип по умолчанию можно задать только для шаблонных классов. Преобразуйте массив руками в double.
1
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 15:58 #3
Цитата Сообщение от MAnton Посмотреть сообщение
в Страуструпе смотрел там написано что вроде как надо писать
надо самому писать
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.09.2013, 18:30 #4
Цитата Сообщение от MAnton Посмотреть сообщение
как сделать что бы при вызове функции по умолчанию вместо T был double ?
А что это даст?
0
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 19:13  [ТС] #5
я делаю функцию шаблонной, что бы она была более гибкой, но пользоваться буду в основном для double, и чтобы каждый раз на писать
C++
1
sum<double>()
хочу сделать по умолчанию
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.09.2013, 19:16 #6
Цитата Сообщение от MAnton Посмотреть сообщение
чтобы каждый раз на писать
А зачем писать <double>? Он же из параметров выведется.
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.09.2013, 19:17 #7
MAnton, выведется из аргумента же
C++
1
2
std::valarray<double> array;
sum(array);
1
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);
то нет? Ведь тип тот же самый
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.09.2013, 19:43 #9
А что такое
Цитата Сообщение от MAnton Посмотреть сообщение
array-0.4
по Вашему мнению?
0
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 19:44  [ТС] #10
это valarray<double>, разве нет?
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.09.2013, 19:53 #11
Цитата Сообщение от MAnton Посмотреть сообщение
то valarray<double>, разве нет?
Всё верно Просто я с std::valarray почти не работал. Смутило вычитание значения из массива.
У Вас какая среда? В VS12 всё собирается успешно.
0
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
22.09.2013, 20:01  [ТС] #12
g++ 4.6.3
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
22.09.2013, 20:18 #13
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Тип по умолчанию можно задать только для шаблонных классов
в С++98 double типом по умолчанию быть не может, а в С++ может, так к слову
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 22:39
Привет! Вот еще темы с ответами:

Указатель на функцию и параметры по умолчанию - C++
Приветствую! Есть такая задача - мне нужно передавать в специальную функцию массив и указатель на функцию. Функции эти для сортировки, и...

Оптимизация. Перегрузки vs параметры по умолчанию - C++
Вот я думаю, какой вариант реализации будет быстрее для выполнения программы. Такой: void Show(double restTime = 0) { ...

Параметры по-умолчанию в виртуальных функциях - C++
Подскажите, это ведь UB ? #include &lt;iostream&gt; class Base { int a; public: Base() : a(1) {}

Функции-шаблонов - C++
1.Нужно переделать в шаблоне input - набор символов не через a = rand() % 15; , а через ручной. Помогите, пожалуйста. #include...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
23.09.2013, 22:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru