У меня есть класс Fee.
class Fee
{
private:
std::string _code;
int _value;
std::string _description_EN;
std::string _description_UA;
std::vector<std::function<std::string()>> get_description;
public:
//CONSTRUCTORS
Fee(int value, std::string_view code, std::string_view description_EN, std::string_view description_UA);
Fee(const std::string _csv_line, const char separator);
Fee(const Fee &) = delete;
Fee(Fee &&) = default;
//OPERATORS
Fee &operator=(const Fee &) = delete;
Fee &operator=(Fee &&) = default;
Fee &operator++() = delete;
Fee &operator++(int) = delete;
Fee &operator--() = delete;
Fee &operator--(int) = delete;
Fee &operator+(const Fee &other) = delete;
Fee &operator-(const Fee &other) = delete;
Fee &operator+=(const Fee &other) = delete;
Fee &operator-=(const Fee &other) = delete;
Fee &operator/(const Fee &other) = delete;
Fee &operator*(const Fee &other) = delete;
Fee &operator/=(const Fee &other) = delete;
Fee &operator*=(const Fee &other) = delete;
Fee &operator%(const Fee &other) = delete;
Fee &operator%=(const Fee &other) = delete;
//SETTERS
void set_new_value(int value);
//GETTERS
std::string code();
int value();
std::string description(Language language = Language::EN);
//FUNCTIONS
//DESTRUCTOR
~Fee() = default;
};
И класс FeeList, в котором хранится карта сборов
class FeeList
{
private:
std::map<std::string, Fee> _fee_list;
FeeList() = default;
public:
static FeeList &fee_list();
//CONSTRUCTORS
FeeList(const FeeList &) = delete;
FeeList(FeeList &&) = delete;
//OPERATORS
FeeList &operator=(const FeeList &) = delete;
FeeList &operator=(FeeList &&) = delete;
//SETTERS
//GETTERS
Fee &fee(const std::string &code);
//FUNCTIONS
void addFee(Fee &fee);
void from_csv_file(const std::string &inv_file, const std::string &um_file, const std::string &id_file, const std::string &tr_file, const char separator);
//DESTRUCTOR
~FeeList() = default;
};
Конструктор класса Fee имеет следующие строки кода, которые заполняют"get_description" vector by lambdas
get_description.resize(2);
get_description[static_cast<size_t>(fee::Language::EN)] = [this]()->std::string{return _description_EN;};
get_description[static_cast<size_t>(fee::Language::UA)] = [this]()->std::string{return _description_UA;};
Эти лямбды вызываются функцией "description (fee :: Language: :)", которая должна возвращать описание неподобающим языком.Реализация довольно проста
std::string fee::Fee::description(Language language)
{
return get_description[static_cast<size_t>(language)]();
}
Проблема в том, что пустая строка возвращается из лямбды.Я создал простой класс для проверки такого подхода, и он работал как ожидалось.Я не могу понять, где проблема.Я получаю значения других переменных (код и значение), поэтому объект хранится правильно.
РЕДАКТИРОВАТЬ: Вот ссылка на coliru.stacked-crooked.com с моим кодом вставлен и работает с указанной проблемой (значение int; и строковый код; это Ok описание строки; пусто) http://coliru.stacked -crooked.com / a / bc56eb53400bd1af Этот файл также можно найти с помощью командной строки Coliru: cat / Archive2 / bc /56eb53400bd1af / main.cpp