inf*_*inf 5 c++ lambda templates c++11
我目前正在做一些带有模板化功能的练习.我的任务是编写变换算法的实现.我做了以下这样的工作:
template <class in, class out, class T>
out stransform(in b, in e, out d, T p(const T&)) {
while (b != e)
*d++ = p(*b++);
return d;
}
Run Code Online (Sandbox Code Playgroud)
与正常变换一样,我必须使用类似的显式类型来调用谓词
stransform(begin(vec1), end(vec1), back_inserter(vec2), predi<double>);
Run Code Online (Sandbox Code Playgroud)
现在,我偶然发现了C++ 11 Lambdas,想要调用我的函数:
stransform(begin(vec1), end(vec1), back_inserter(vec2), [] (double x) ->double {return x * 10;} );
Run Code Online (Sandbox Code Playgroud)
有了这个,我确实得到了一个编译器错误,该类型无法推断出来.这是我不理解的事情,因为我实际上在我的lambda中定义了T类型两次.
我还检查了它正在使用的原始转换函数.然后我检查了那个的实现,它显然是用整个函数的模板类实现的.这是使用模板实现谓词的正确方法吗?
vis*_*tor 13
谓词通常是一个简单的模板参数:
template <class in, class out, class UnaryPredicate>
out stransform(in b, in e, out d, UnaryPredicate p);
Run Code Online (Sandbox Code Playgroud)
这将接受指向函数,lambdas和函数对象的指针.