我希望有一个std :: function来记住它的状态。所以我试过这个:
#include <iostream>
#include <functional>
class Dots {
public:
Dots(std::ostream & sink) : out_stream(sink) {}
std::function<void(const int n)> show = [this](int n) {
level+=n;
for (int i = 0; i < level; i++) out_stream << "*";
out_stream << "\n";
};
std::ostream & out_stream;
int level = 0;
};
int main() {
Dots d(std::cerr);
d.show(3);
d.show(1);
return 0;
}
这与clang(Apple LLVM 5.0版)一起编译,但它不适用于gcc 4.7.3。后者说:错误:无效使用非静态数据成员'Dots :: level'。任何人都可以解释我如何使它工作吗?
我的最终目标是制作一个我将用作访问者的通用方法。所以在真实情况下我会有我的
template
void traverse_depth_first(N root,A previsit_action,A invisit_action,A postvisit_action);
类型 A 是我正在尝试创建的std :: function对象。我认为lambdas会对此有好处,因为它们可以很容易地在现场创建访问方法。
修改 所以我应用了Kerrek SB的答案,上面的代码用gcc和clang编译。但它没有icc 14.0.2,它抱怨
error: "this" cannot be used inside the body of this lambda
有人能解释我为什么吗?