在C ++ 11 STL之前模拟支撑列表初始化

时间:2017-03-08 15:39:48

标签: c++ c++11 initializer-list c++-standard-library

在预C ++ 11的标准库中,有没有办法从类似std::initializer_list的对象创建类构造函数,这在使用std::initializer_list等支持列表初始化时会起作用呢?

可以使用C ++ 11(甚至是C ++ 14)语言功能。但是,有些项目我还在Xcode上使用libstdc ++,因为我需要支持OS X 10.6。

1 个答案:

答案 0 :(得分:1)

您的问题是您将C ++ 11作为语言功能,但标准库不支持它。所以你问你是否可以从initializer_list构建容器。

是的,但它的语法不同。这个功能就足够了:

template<typename Container>
Container from_list(std::initializer_list<typename Container::value_type> il)
{
  return Container(il.begin(), il.end());
}

auto vec = from_list<std::vector<int>>({1, 2, 3, 4, 5});

标准库容器具有与迭代器对一起使用的构造函数。所以这适用于任何这样的容器。

但是,这假设标准库实际上具有initializer_list类型。如果没有,那你就不走运了。