C++ C++;11参数包过载

C++ C++;11参数包过载,c++,c++11,C++,C++11,我有一个功能: template <typename A> Foo createFoo() { std::initializer_list<std::size_t> list = { Object<A>::getIndex() } ); return Foo(list); } 所以我这样调用它: Foo foo = createFoo<Bar, Fred, Wilma>(); Foo-Foo=createFoo(); 这给了

我有一个功能:

template <typename A>
Foo createFoo() {

    std::initializer_list<std::size_t> list = { Object<A>::getIndex() } );
    return Foo(list);
}
所以我这样调用它:

Foo foo = createFoo<Bar, Fred, Wilma>();
Foo-Foo=createFoo();
这给了我一个错误:

错误:扩展模式“Object::getIndex()”不包含参数包

并指向代码的“…”部分

我不想将单个函数声明为

template <typename ...A>
Foo createFoo() {

    std::initializer_list<std::size_t> list = { Object<A>::getIndex() } );
    return Foo(list);
}
模板
Foo createFoo(){
std::initializer_list={Object::getIndex()});
返回Foo(列表);
}
因为,假设
Foo
类具有优化的逻辑,以防初始值设定项列表中只有一个
std::size\t
项,我想在API中使用它

我使用带有
-std=c++11
选项的GCC版本4.8.4

多谢各位

std::initializer_list<std::size_t> list = { Object<A1>::getIndex(), Object<A2>::getIndex()... } );
然后您可以说
Object::getIndex()…

或者,如果必须强制执行一定数量的参数,则:

std::initializer_list<std::size_t> list = { Object<A1>::getIndex(),Object<A2>::getIndex(), Object<Ax>::getIndex()... } );
std::initializer_list={Object::getIndex(),Object::getIndex(),Object::getIndex()…});

扩展接受一个空的参数包,因此这将适用于2种或更多类型。

因为我想维护两个不同的
createFoo
函数,正如我在问题中试图表达的那样,它们被大量参数重载。是的,所有重要的是一个带有。。。在它包含一个类型参数包之后,不是一个单一的类型。只要记住。。。在代码中必须与。。。在模板中
std::initializer_list<std::size_t> list = { Object<A1>::getIndex(), Object<A2>::getIndex()... } );
template <typename...Ax>
Foo createFoo() {
std::initializer_list<std::size_t> list = { Object<A1>::getIndex(),Object<A2>::getIndex(), Object<Ax>::getIndex()... } );