повышение :: my_map_list_of - PullRequest
       1

повышение :: my_map_list_of

1 голос
/ 09 января 2012

У меня есть некоторые проблемы с пониманием функции boost::my_map_list_of. Особенно эта часть:

operator Map const&() const { return data; }

Может кто-нибудь объяснить мне, как это работает? И карта, созданная таким образом, инициализируется во время компиляции?

Ниже приведен весь импульс: my_map_list_of () код:

template<class K, class V>
struct map_list_of_type {
   typedef std::map<K, V> Map;
  Map data;
  map_list_of_type(K k, V v) { data[k] = v; }
  map_list_of_type& operator()(K k, V v) { data[k] = v; return *this; }
  operator Map const&() const { return data; }
};
template<class K, class V>
map_list_of_type<K, V> my_map_list_of(K k, V v) {
  return map_list_of_type<K, V>(k, v);
}

int main() {
  std::map<int, char> example = 
  my_map_list_of(1, 'a') (2, 'b') (3, 'c');
  cout << example << '\n';
}

1 Ответ

1 голос
/ 09 января 2012

Код в main() вызывает функцию my_map_list_of(), которая возвращает объект map_list_of_type:

my_map_list_of(1, 'a')

Затем для возвращаемого объекта вызывается map_list_of_type::operator().Эта функция возвращает тот же объект.

my_map_list_of(1, 'a') (2, 'b');
                       ^^^^^^^^

И map_list_of_type::operator() снова вызывается для вновь возвращаемого объекта.

my_map_list_of(1, 'a') (2, 'b') (3, 'c');
                                ^^^^^^^^

Затем, map_list_of_type::operator Map const&() вызывается неявно, потому что это назначение требуетЭто.Объект map_list_of_type<int,char> преобразуется в std::map<int,char>

std::map<int, char> example = my_map_list_of(1, 'a') (2, 'b') (3, 'c');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...