Как инициализировать пользовательский контейнер с помощью многомерного списка инициализаторов? - PullRequest
0 голосов
/ 25 апреля 2020

В настоящее время я работаю над пользовательской оболочкой для типа std::map с дополнительными методами, такими как ContainsValue(). Но так как я пытаюсь сделать его максимально совместимым с std :: map, я хотел бы знать, возможно ли инициализировать его «многомерным списком инициализаторов».

Мой пользовательский тип карты определяется следующим образом:

template <typename TKey, typename TValue>
class CustomMap {
private:
  std::map<TKey, TValue> mapContent;

public:
  // Some interaction methods here

  void operator=(/* initialization type here */) {
    /* initialization here */
  }
}

И я говорю о списке инициализаторов, например:

CustomMap<uint64_t, std::string> test = {
  { 0xFF, "MaxByte" },
  { 0xFFFF, "MaxWord" },
  { 0xFFFFFFFF, "MaxDWord" },
  { 0xFFFFFFFFFFFFFFFF, "MaxQWord" }
};

Обратите внимание, что нет приведения любого типа в инициализация. Все происходит автоматически; как и в оригинальном типе std::map.

1 Ответ

2 голосов
/ 25 апреля 2020

Конечно, сделать конструктор, принимающий std::initializer_list<value_type>, как std::map имеет: https://en.cppreference.com/w/cpp/container/map/map

Или переслать все конструкторы: Пересылка всех конструкторов в C ++ 0x

...