Здравствуйте, Sm0ke, Вы писали:
S>Согласитесь, что читателю кода было бы нагляднее видеть в качестве value_type структуру со свойствами (key, value).
конечно в теории оно должно быть лучше. Но на пректике мне визуально не нравится
struct MyStruct {
struct MyPair {
std::string key;
std::string value;
};
MyPair insert();
};
MyStruct::MyPair MyStruct::insert() {
}
обилие вложенностей немного смущает. Особенно если кто-то не любит auto.
S>S>auto res = v_map.try_emplace(v_key, v_arg);
S>if( res.was_added ) {
S> res.it->value.some_method();
S>}
S>
S>Красота!
Это не красота. Вот это красота
const auto [it, was_added] = v_map.try_emplace(v_key, v_arg);
auto& [key, value] = *it;
if(was_added) {
value.some_method();
}
Вообще, конечно заводить структуры вроде как правильно и особо тут спорить не о чем, но предложу другой подход: усилить систему типов.
template<typename Name> struct NewStringType {
...
};
using MuduleName = NewStringType<struct ModuleNameHelp>;
using VarName = NewStringType<struct VarNameHelp>;
и тогда особо пофигу: в структуре завёрнуты значения или в тюпле. Можно забыть/ошибиться. Компилятор за всем проследит и "аккуратно но сильно" даст по рукам.