У вас уже есть все, что вам нужно!
РЕДАКТИРОВАТЬ:
Просто измените часть, где вы бросаете свое исключение:
if (it == map_.end()) {
if ( -- part of allowed set -- ){
-- create a new currency --
}
else {
throw std::exception(("[Currency::Get] Currency '" + Code + "' not found").c_str());
}
}
ВыМожно выполнить сравнение, чтобы увидеть, разрешена ли валюта различными способами:
- Другая карта с перечнем разрешенных строковых кодов
- Сравнение регулярных выражений по коду
- Проверка кода вручную по статическому массиву допустимых значений
EDIT2: Ниже приведен полностью отдельный ответ от приведенного выше:
Из описаниявашей проблемы, вы, возможно, захотите использовать перечисления, а не классы, чтобы различать возможные типы валют.
enum Currency { US, CAN, JPY, CHF, EURO };
std::map<Currency curreny, std:string code>;
РЕДАКТИРОВАТЬ 3:
Добавить что-то вроде:
private:
std::vector<Currency> initializedList;
И в вашем методе Get вместо возврата "it-> second" вернуть ссылку на объект в векторе.Если он еще не существует, сначала поместите объект в вектор.