c++ - 如何让 lambda 成为类(class)的 friend ?

标签 c++ c++11 lambda friend

比方说,我有一个类:

class A {
  int a;
};

我有一个 lambda:
auto function = [](A* a) {
  a->a;  // <== gives an error in this line.
};

function(new A);

有没有办法在 lambda 中使用私有(private)成员/方法? - 没有必要将指针传递给 lambda - 它可能是 capture-by 或其他东西。

欢迎所有合理的方案。

最佳答案

您可以通过创建一个返回 lambda 函数的友元函数来实现。它继承了 friend 访问权限:

struct A {
  friend std::function<void(A&, int)> f();

  private:
    int i;
    void test() {std::cout << "test: " << i << "\n";}
};

std::function<void(A&, int)> f() {
  return [] (A &a, int i) {a.i = i; a.test(); };
}

int main() {
    A a;
    f()(a, 13);

    return 0;
}

关于c++ - 如何让 lambda 成为类(class)的 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544969/

相关文章:

c++ - 使用 WRL 实例化 SpatialSurfaceObserver

c++ - CUDA 中的性能

c++ - 第二次运行的奇怪方法行为

c++ - 如何从 C++ 中的类方法正确返回 std::type_info

c++ - Lambda 到函数指针适配器的理解

python - 哪个动态创建的对象调用了该函数?

java - 如何从作为 lambda 传递的函数接口(interface)对象实例获取参数?

android ndk开发问题: 'Invalid arguments' error for memcpy function

c++ - 无法从 int 推断出 'const' ... 的模板参数

c++ - 克服 n^2 运行时程序