代码之家  ›  专栏  ›  技术社区  ›  Mohan

是否可以通过编程方式构造std::initializer\u列表?

  •  1
  • Mohan  · 技术社区  · 7 年前

    我正在包装一个C++的FN表单

    foo(input, std::initializer_list<Option> options);
    

    我需要从另一种格式的数据中构造一个选项列表,并将它们传递到 foo I can't see 一种构造 std::initializer_list 从程序上说是这样吗?(如果一个人被迫使用更标准的容器,这是有道理的,但我想在重新分解之前检查一下。)

    2 回复  |  直到 7 年前
        1
  •  6
  •   StoryTeller - Unslander Monica    7 年前

    标准C++没有办法。 std::initializer_list 是语言支持类型。它的存在使我们能够使用语言构造(列表初始化)。

    因此,只有实现才能创建它们,而实现只有在进行列表初始化时才需要这样做。您的实现可能提供了一个允许创建它们的扩展,但这不太可能产生标准代码。

        2
  •  0
  •   darune    7 年前
    void test() {
      double d1 = 1.1;
      double d2 = 2.2;
      double d3 = 3.3;
      std::initializer_list<int> init_list{ static_cast<int>(d1), static_cast<int>(d2), static_cast<int>(d3) };
    }
    

    所以你可以,但只适用于固定大小的列表。

    推荐文章