Re[2]: Вопрос целесообразности обобщения
От: Sm0ke Россия ksi
Дата: 13.07.23 10:43
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>
SP>const auto [it, was_added] = v_map.try_emplace(v_key, v_arg);
SP>auto& [key, value] = *it;
SP>if(was_added) {
SP>    value.some_method();
SP>}
SP>


Вот бы можно было так без auto :

[my_map::iterator it, bool was_added] = v_map.try_emplace(v_key, v_arg);


SP>Вообще, конечно заводить структуры вроде как правильно и особо тут спорить не о чем, но предложу другой подход: усилить систему типов.


SP>
SP>template<typename Name> struct NewStringType {
SP>    ...
SP>};
SP>using MuduleName = NewStringType<struct ModuleNameHelp>;
SP>using VarName = NewStringType<struct VarNameHelp>;
SP>


Чтобы нельзя было сравнивать имя модуля с именем переменной?

Вот тут как раз можно бы и обобщить. Такая обёртка подошла бы не только для строк. Назвать к примеру wrap, и добавить как параметр шаблона хранимый тип.

template <typename T, typename Unique>
struct wrap {
  using value_type = T;
  using unique_type = Unique;

  // data
  value_type value;

  friend bool operator == (const wrap &, const wrap &) = default;
  friend auto operator <=> (const wrap &, const wrap &) = default;
};


Но мне кажется, что на этот случай наверняка должно быть уже готовое решение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.