我想编写一个简单的函数来简化std::transform
以便在单个 vector 上进行转换。
到目前为止,我得到的是:
template<typename T>
void transform(std::vector<T> &vec, const std::function<T(const T &)> &fun) {
std::transform(std::begin(vec), std::end(vec), std::begin(vec), fun);
}
现在,当我想使用此功能时,可以编写例如:
transform<int>(vec, my_function);
但是我更愿意只使用
transform(vec, my_function);
有没有办法调整我的代码以自动推断类型?
错误:
最佳答案
似乎您使用lambda作为参数; lambda可以转换为std::function
,但是在template argument deduction中将不考虑隐式转换,这就是它失败的原因。
您可以在传递时明确使用static_cast
将lambda转换为std::function
,或停止使用std::function
。例如
template<typename T, typename F>
void transform(std::vector<T> &vec, F fun) {
std::transform(std::begin(vec), std::end(vec), std::begin(vec), fun);
}
关于c++ - 简化单个 vector 的std::transform,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52905080/