Kor*_*ose 1 c++ lambda this c++11
在我当前的项目中,我试图将私有成员函数作为参数传递给另一个函数.在我的代码中,另一个函数是不同类的成员函数,但为了保持简单,这里它是一个自由函数.
void outside_function(std::function<void(int)> func) {
// do something with func
}
class MyClass {
public:
void run();
private:
bool my_func(double); // defined in source file
};
Run Code Online (Sandbox Code Playgroud)
现在,从里面run我想提出my_func到outside_function作为参数.由于签名run不符合参数的要求,我不能简单地传递它.使用适配器模式是我的第一次尝试,当我被提醒时,成员函数隐式地将this指针作为第一个参数.这个答案建议使用lambda表达式,这就是我所做的.
void MyClass::run() {
outside_function([this](int a) -> void {
double d = static_cast<double>(a);
this->my_func(d);
});
}
Run Code Online (Sandbox Code Playgroud)
为什么这样做?从我的理解,outside_function无法访问my_func.为什么我不my_func先公开?这是编译器做的事情还是我不知道的一些C++规则?
此外,这种方法是否有任何可能会破坏我的代码?
private访问说明符仅限制对象名称在类外部可见(无法查找).对象本身就像任何其他成员一样.
[class.access]/1一个班级的成员可以
(1.1)私人; 也就是说,它的名称只能由声明它的类的成员和朋友使用.
(1.2)受保护; 也就是说,它的名称只能由声明它的类的成员和朋友,从该类派生的类以及他们的朋友使用(参见[class.protected]).
(1.3)公开; 也就是说,它的名称可以在没有访问限制的任何地方使用.
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |