1

解释以下测试用例无法编译的根本原因是什么:

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

template<typename Type, typename... Args> 
void apply(std::vector<Type> &v, Args... args, void(*algo)(Type*, Type*, Args...))
{
    algo(&*v.begin(), &*v.end(), args...);
}

int main()
{
    std::vector<int> v(10, 50);
    apply(v, 3, std::iota);
    for (unsigned int i = 0; i < v.size(); ++i) {
       std::cout<<v[i]<<std::endl;
    }
}

函数原型是否有解决方法?

4

1 回答 1

2

第一个问题是,正如编译器错误所说:

参数包必须位于参数列表的末尾。

换句话说,您必须声明您的函数Args ... args,列表中的最后一个参数也是如此。

另外,我不相信编译器会以您使用模板的方式推断模板函数的类型,因此您必须明确指定模板:

apply<int, int>(v, std::iota, 3); // or something

你的想法被提议的修改剪断了

于 2012-11-06T22:26:11.493 回答