void CheckBox::setParam( std::string const &k, std::string const &v) { using lambda = void (*)(CheckBox*,std::string const&); using map = std::unordered_map<std::string, lambda>; static map param_map { {"checked", [](CheckBox *v, std::string const &str) { v->setChecked(str == "true"); }}, {"checkedFillColor", [](CheckBox *v, std::string const &str) { auto old = v->getCheckedParams(); old.fillColor = std::stoul(str, NULL, 16); v->setCheckedParams(old); }}, {"checkedStrokeColor", [](CheckBox *v, std::string const &str) { auto old = v->getCheckedParams(); old.strokeColor = std::stoul(str, NULL, 16); v->setCheckedParams(old); }}, {"checkedBorderWidth", [](CheckBox *v, std::string const &str) { auto old = v->getCheckedParams(); old.lineWidth = std::stoi(str, NULL); v->setCheckedParams(old); }}, // {"checkedBorderWidth", [](CheckBox *v, std::string const &str) { // auto old = v->getCheckedParams(); // old.lineWidth = std::stoi(str, NULL); // v->setCheckedParams(old); // }}, }; auto const &it = param_map.find(k); if (it != param_map.end()) it->second(this, v); else Button::setParam(k, v); }