如何解决lambda 与函数对象
由于缺少复制构造函数,以下代码片段无法编译。
template <typename Func>
void print(Func f) {
f();
}
struct abc {
abc() = default;
abc(const abc&) = delete;
abc& operator=(const abc&) = delete;
void operator()() {
std::cout << "f" << std::endl;
}
};
int main() {
abc s;
print(s);
return 0;
}
为什么下面会编译?我认为 lambda 也没有复制构造函数。
template <typename Func>
void print(Func f) {
f();
}
int main() {
auto f = []() {
std::cout << "f" << std::endl;
};
print(f);
return 0;
}
我使用的是 g++ -std=c++11。
解决方法
为什么下面会编译?
因为 lambda 是可复制构造的。
我认为 lambda 也没有复制构造函数。
你想错了。只要 Lambda 闭包没有不可复制的值捕获,它们就可以复制构造。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。