Open alexey-malov opened 5 years ago
[x] Обмен данными с калькулятором производить не через строки, а с использованием чисел. Полезным может оказаться тип std::optional для возврата значений, неинициализированных переменных.
[x] Переменные типа double могут хранить значение NAN http://www.cplusplus.com/reference/cmath/isnan/ http://www.cplusplus.com/reference/cmath/nan-function/
Преобразование из/в строковое представление лучше оставить в CalcControl
class CCalculator
{
public:
CCalculator() = default;
~CCalculator() = default;
bool CCalculator::SetVar(const std::string& identifier, std::string& errorMsg)
{
if (!CanBeIdentifier(identifier))
{
errorMsg = "identifier name incorrect";
return false;
}
auto it = m_names.find(identifier);
if (it == m_names.end())
{
auto val = std::make_shared<CVariable>();
auto var = std::make_pair(identifier, val);
m_names.insert(var); // (1)
m_vars.insert(var); // (2)
return true;
}
errorMsg = "identifier already exist";
return false;
}
bool CCalculator::SetValue(const std::string& identifier, const double value, std::string& errorMsg)
{
if (!CanBeIdentifier(identifier))
{
errorMsg = "identifier name incorrect";
return false;
}
std::pair<std::string, std::shared_ptr<CVariable>> var;
auto it = m_vars.find(identifier);
if (it != m_vars.end())
{
var = *it;
}
else
{
var = std::make_pair(identifier, std::make_shared<CVariable>());
m_names.insert(var);
m_vars.insert(var);
}
var.second->SetValue(value);
UpdateFns();
return true;
}
auto it_var = m_names.find(firstOperand);
it_var
- не используйте snake_casem_fns_update_list
не использовать snake_case