【发布时间】:2020-05-30 11:46:00
【问题描述】:
我在玩一些 C++11 功能,遇到了以下问题:
#include <iostream>
#include <vector>
template <class T>
void map(std::vector<T>& values, T(*func)(T)) {
for (int &value : values) {
value = func(value);
}
}
int mul2(int x) {
return 2*x;
}
auto mul3 = [](int value) {
return value * 3;
};
int main() {
std::vector<int> v = { 1,2,3,4,5 };
map(v, mul3);
for (auto value : v) {
std::cout << value << std::endl;
}
}
使用map 和mul2 可以按预期工作,但是当我使用mul3 函数时,它会出现编译错误。我希望 auto 在这种情况下会给我一个 int 函数指针,但这里似乎不是这种情况。任何人都可以解释这种行为吗?
【问题讨论】:
-
Lambda 不是函数指针。
-
@VittorioRomeo 我不明白为什么它不起作用,因为在另一个问题中,OP 问题是捕获,同时在我的 sn-p 中没有捕获
-
@VittorioRomeo 遗憾的是问题已结束,还有其他选择。您还可以使用“函子”模板模式模板化“函数”。见这里:godbolt.org/z/fdHvAP
-
我重新打开了这个问题,因为链接的副本是关于捕获 lambdas 而这个问题不是。 “重复”问题的答案没有回答这个问题。
-
尝试为
map函数明确指定类型T。map<int>( v, mul3 );