Deduce non-type template parameter return value
Hi,
I've written a function template for applying a free function to every
element of a std::vector:
#include <vector>
template<class T, T F(T)>
std::vector<T> map(const std::vector<T>& from)
{
std::vector<T> to;
to.reserve(from.size());
for (typename std::vector<T>::const_iterator iter = from.begin();
iter != from.end(); ++iter) {
to.push_back(F(*iter));
}
return to;
}
This can be used as follows:
#include <cmath>
int main()
{
std::vector<float> angles;
angles.push_back(1);
angles.push_back(2);
angles.push_back(3);
std::vector<float> sines = map<float, std::sin>(angles);
}
As you can see, std::sin is passed as a non-type template parameter.
However, I'd like to get rid of the the first parameter (float in the
example) so the call would become map<std::sin>(angles). Is there a
way to do this in C++03 or C++11?
Please note that I don't want to pass function pointers at run-time;
the mapping function (here, std::sin) is known at compile-time so I
want to take advantage of that.
Thanks,
Chris