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()... } );