вернуть пустой вектор по ссылке - PullRequest
0 голосов
/ 17 января 2019

Я возвращаю вектор по ссылке, как показано ниже, и становится немного уродливо, когда я хочу вернуть пустой вектор, когда на карте нет элемента. Далее выдается предупреждение (returning address of local variable), и для его исправления у меня есть еще одна закрытая переменная-член vector<ClassA> empty_, и я могу вернуть ее, чтобы избежать этого.

Мне интересно, есть ли элегантный способ реализовать это.

const std::vector<ClassA>& GeVector(const std::string& class_id) {
auto iter = class_map_.find(class_id);
if (iter != class_map_.end())
    return iter->second;
return {}; // return empty_;
}

private:
std::unordered_map<std::string, std::vector<ClassA>> class_map_;
vector<ClassA> empty_;

Ответы [ 2 ]

0 голосов
/ 17 января 2019

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

const std::vector<ClassA>& GeVector(const std::string& class_id) {
    auto iter = class_map_.find(class_id);
    if (iter != class_map_.end())
       return iter->second;

    throw std::exception("Element not found"); // or similar
}
0 голосов
/ 17 января 2019

Вы можете использовать статическую переменную:

static const std::vector<ClassA> empty;
return empty;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...