一个模板函数,可以接受任何类型的两个列表

Ver*_*gon 6 c++ initializer-list c++11

我正在尝试并尝试创建一个接受两个列表的函数:一个浮点列表,一个整数列表.我的第一个方法是:

template<typename FloatIterator, typename IntIterator>
Thing *createThing(
   FloatIterator floatsBegin,
   FloatIterator floatsEnd,
   IntIterator intsBegin,
   IntIterator intsEnd
) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

这适用于各种容器,甚至是普通的指针.但是,我无法轻松传入std :: initializer_list.例如,我希望能够像这样调用函数:

Thing *thing = createThing({ 3.0, 4.0, 5.0 }, { 0, 1, 2, 2, 3, 0 });
Run Code Online (Sandbox Code Playgroud)

所以我在想,我会尝试这样的事情:

template<typename FloatContainer, typename IntContainer>
Thing *createThing(const FloatContainer &floats, const IntContainer &ints) {
    for (float f : floats) { ... }
    for (int i : ints) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这适用于stl容器和initializer_lists,但它不再适用于简单的指针.我不能再这样做了:

int numFloats;
float *floats = readFloatsFromFile(&numFloats, "myfloats.txt");

int numInts;
int *ints = readIntsFromFile(&numInts, "myints.txt");

Thing *thing = createThing(floats, floats + numFloats, ints, ints + numInts);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有办法编写一个可以接受所有三种输入的函数?(指针,stl容器和initializer_lists)

谢谢!

Any*_*orn 1

Boost迭代器范围将允许您用开始/结束对来装饰一对迭代器(前向范围概念):

http://www.boost.org/doc/libs/1_55_0/libs/range/doc/html/range/reference/utilities/iterator_range.html