Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 07.11.2020
Сообщений: 7

Что вернуть при ошибке для шаблонной функции?

30.03.2022, 02:28. Показов 541. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!

Допустим, имеется шаблонный класс Vector. У этого класса имеется функция last().

C++
1
2
3
4
5
6
T last()
{
     if(!this.count()) return ?  // Что можно здесь вернуть?
 
     return this.getLast();
}
Мне хотелось бы чтобы работа программы не прерывалась при попытке взять last() у пустого Vector.
Но для этого надо что-то вернуть заместо T в случае ошибки.

Можно, конечно, каждый раз при вызове last() проверять не пустой ли он, но может быть есть способ сделать это внутри last()?

Надеюсь, понятно выразился. Благодарю за ответы!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2022, 02:28
Ответы с готовыми решениями:

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

Что сделать, для того что бы транзакция откатила изменение в таблицах при ошибке?
BEGIN TRANSACTION INSERT INTO City (name) values ('Запорожье') INSERT INTO OS (architecture,name,producer) values (1,'Leopard',1) ...

как вернуть клиенту свое сообщение об ошибке при нарушении констрэйнта
привет, народ. sql server 7.0 в теле приггера или хп можно написать raisError('ошибка.....',,) и на клиент вернется мое сообщение об...

5
236 / 50 / 37
Регистрация: 24.01.2022
Сообщений: 137
30.03.2022, 04:48
QSetner, если не изменять тип возвращаемого значения, то вариантов не так много, например можно вернуть значение по умолчанию или "бросить" исключение. Ниже эти варианты, а также некоторые другие, где был изменен "тип" возвращаемого значения:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    T last()
    {
        if (this->count() == 0)
            return T();
        return this->getLast();
    }
    // or
    std::optional<T> last()
    {
        if (this->count() == 0)
            return std::nullopt;
        return this->getLast();
    }
    // or
    T last()
    {
        if (this->count() == 0)
            throw std::runtime_error("vector empty!");
        return this->getLast();
    }
    // or
    T* last()
    {
        if (this->count() == 0)
            return nullptr;
        return new T(this->getLast());
    }
    // ...
2
1 / 1 / 0
Регистрация: 07.11.2020
Сообщений: 7
30.03.2022, 05:12  [ТС]
Цитата Сообщение от Mushroomer Посмотреть сообщение
QSetner, если не изменять тип возвращаемого значения, то вариантов не так много, например можно вернуть значение по умолчанию или "бросить" исключение.
Благодарю! Тогда в данном случае мне видится наиболее рационально использовать значение по умолчанию с индикацией ошибки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
T last(bool & hasError)
{
    if(hasError) hasError = false;
 
    if(!this.count())
    {
        hasError = true;
        return T();
    }
    
    return this.getLast();
}
По крайней мере можно не забыть делать проверку в коде.
Благодарю ещё раз!
1
236 / 50 / 37
Регистрация: 24.01.2022
Сообщений: 137
30.03.2022, 05:26
QSetner, тогда важно, чтобы у типа T был тот самый конструктор по умолчанию
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
30.03.2022, 07:10
Можно просто бросить исключение

Добавлено через 1 минуту
Или перед вызовом last проверить, если данных нет, то просто не вызывать эту функцию. Смотрите что больше подходит в вашем случае
1
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
30.03.2022, 08:36
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2022, 08:36
Помогаю со студенческими работами здесь

Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки"
template &lt;typename T&gt; int GnomeSort(T* p, int length) { int i, count; i = 0; count = 0; while(i &lt; length) { if(i...

Ошибка при создании шаблонной функции
template &lt;typename T&gt; int unique_count(const std::vector&lt;T&gt; &amp;vec){ } int main() { std::cout &lt;&lt; unique_count(&quot;Hello world&quot;)&lt;&lt;...

Ошибка при сборке перегруженной шаблонной функции
Привет Есть перегруженная шаблонная функция с приведением типов. Перегрузка состоит в вариантах параметров: 1. передача параметров по...

почему нету конфликта при выборе шаблонной функции?
template &lt;typename T&gt; T Sqr(const T&amp; t) { return t * t; } template &lt;typename T&gt; vector&lt;T&gt; Sqr(const vector&lt;T&gt;&amp; v) { ...

Ошибка сборки при раздельной компиляции шаблонной функции
Помогите с ошибкой, никак не могу найти решение #pragma once #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;string&gt; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru