gpt4 book ai didi

c++ - 在编译时将 this 指针和类方法的参数传递给本地 lambda 函数

转载 作者:行者123 更新时间:2023-12-04 14:04:22 27 4
gpt4 key购买 nike

假设您有一个场景,当您想要在一个方法中创建一个 constexpr lambda 以在编译时计算某些东西。

struct A {
int a;
constexpr A(int a) : a(a) {}
constexpr auto operator+(const A& rhs) {
constexpr auto l = [&]() {
return A(this->a + rhs.a);
};
return l();
}
};

此代码无法编译,因为编译器认为 thisrhs 不是常量表达式。有没有办法将 thisrhs 传递给本地 constexpr lambda?

最佳答案

您不能捕获thisrhsa 成员(通过引用)并维护constexpr 有效性1;但是,您可以将这些成员作为(常量)引用参数传递给您的 lambda:

struct A {
int a;
constexpr A(int a) : a(a) { }
constexpr auto operator+(const A rhs) {
constexpr auto l = [](const int& ta, const int& ra) {
return A(ta + ra);
};
return l(a, rhs.a); // Or return l(this->a, rhs.a) if you prefer
}
};

1 或者也许可以,但它很乱:Lambda capture as const reference?

关于c++ - 在编译时将 this 指针和类方法的参数传递给本地 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69005795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com