【发布时间】:2012-01-04 08:04:45
【问题描述】:
我一直在使用新的 c++ 标准中的可变参数模板,并想出了一个映射函数(不包括标题 + 使用 decs):
template<typename T>
T square(T i)
{
return i * i;
}
template <typename T, typename... Ts>
const tuple<Ts...> map(const T f, const Ts...args)
{
return make_tuple(f(args)...);
}
int main(int c, char *argv[])
{
tuple<int, int> t;
int (*fp) (int) = square;
t = map(fp, 6, 8);
cout <<get<0>(t) <<endl;
cout <<get<1>(t) <<endl;
return 0;
}
哪个有效。只要 map 的所有参数都是相同的类型。如果我将 main 更改为使用更通用的形式:
tuple<int, float> t;
t = map(square, 6, 8.0f);
gcc 4.4 报告:
In function ‘int main(int, char**)’:
error: no matching function for call to ‘map(<unresolved overloaded function type>, int, float)’
任何想法如何使这项工作?
【问题讨论】:
-
你是
abusing namespace std;吗?tuple来自哪里? -
@KerrekSB:他说他删除了
using decs,这对我来说似乎很明显using滥用。
标签: c++ templates map functional-programming c++11