我发现自己处在一个陌生的地方,精神上.在C++项目中,我渴望关闭.
背景.有一个Document类型的类,它有一个公共Render方法,它产生一个深度调用树.有一些瞬态只在渲染过程中才有意义.现在它像常规成员变量一样驻留在类中.但是,这在某些级别上并不令人满意 - 这些数据仅在渲染调用期间有意义,为什么要一直存储它?在参数中传递它将是丑陋的 - 那里有大约15个变量.绕过一个结构会在低级方法中添加很多"RenderState - > ...".
那我想要什么?我想要世界,就像我们所做的一样.具体来说,一组变量是:
我知道我可以使用C++获得一些属性 - 但不是全部.告诉我,我不会变得怪异.
哎呀,在帕斯卡尔,所有地方,嵌套功能给你所有......
那么,在C++中模拟闭包的好方法是什么,尽可能多地获得上述好处?
标准C++,因为C++ 11提供了原生的lambda表达式,而且几个编译器(至少VC10 + GCC和clang)实现了它.
使用GCC和Clang,您可以使用"--std = c ++ 11"激活它(如果可用,则使用更高版本的C++).VC10及更高版本在不需要标志的情况下激活它.
顺便说一句,你也可以使用boost :: lambda(这不是完美但与C++ 03一起使用)也在C++中提供lambda.