我本以为可以做到这一点?然而,似乎并非如此.为什么?或者我做错了什么?
#include <vector>
#include <initializer_list>
#include <iostream>
using namespace std;
void fn(std::initializer_list<int> i)
{
for(int ivalue:i)
{
cout << ivalue << endl;
}
}
int main()
{
fn({1,2,3});
fn(vector<int>{4,5,6})
return 0;
}
我问这个的原因是因为我有一个类,它接受一个初始化列表,我从它派生,但需要在将它传递给基础之前按下初始化列表.我怎么能做到这一点?
最佳答案 有时旧方法是最好的方法:只需通过范围:
void fn(std::initializer_list<int> i) {
fn(i.begin(), i.end());
}
template <typename It>
void fn(It it, It end) {
for (; it != end; ++it) {
std::cout << *it << std::endl;
}
}
fn({1, 2, 3});
std::vector<int> v{1, 2, 3};
fn(std::begin(v), std::end(v));
对于您的特定问题…无论如何,获取初始化列表的构造函数必须迭代它,只需将该操作委托给迭代器对构造函数:
Foo(std::initializer_list<T> init)
: Foo(init.begin(), init.end())
{ }
template <typename It>
Foo(It it, It end)
{
// here the magic happens
}