【问题标题】:How to initialize a custom container with a multi-dimensional initializer list?如何使用多维初始化列表初始化自定义容器?
【发布时间】:2020-04-25 09:43:14
【问题描述】:

我目前正在使用 ContainsValue() 等其他方法为 std::map 类型开发自定义包装器。但是由于我尝试使其尽可能与 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 类型一样。

【问题讨论】:

    标签: c++ stdmap initializer-list


    【解决方案1】:

    当然,让构造函数采用 std::initializer_list&lt;value_type&gt; 就像 std::map 具有:https://en.cppreference.com/w/cpp/container/map/map

    或转发所有构造函数:Forwarding all constructors in C++0x

    【讨论】:

    • 对不起,我不太明白。 std::initializer_list 不只包含一种类型吗?那我该怎么做呢?老实说,我什至不知道这如何与 std::map 一起使用。
    • @RobinLe 您可以在容器中使用using value_type = std::pair&lt;TKey, TValue&gt;(就像在std::map 中所做的一样)。之后,您的 std::initializer_list&lt;value_type&gt; 实际上将采用相同类型的对象,即一对键和一个值。
    • @passing_through 啊,好的,非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2011-10-11
    • 1970-01-01
    • 2012-03-25
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多