C++ 将方法和字段带入外部范围,无需显式引用
Posted
技术标签:
【中文标题】C++ 将方法和字段带入外部范围,无需显式引用【英文标题】:C++ bring methods and fields into external scope, without explicit references 【发布时间】:2019-11-09 19:12:16 【问题描述】:我想要一种类似于闭包隐式执行的行为,将变量带入作用域,而无需显式声明引用
示例结构
struct A
T x;
void g();
;
行为效果,真实但不受欢迎的语法
void f()
A a;
T& x= a.x;
void(A::*g)()= &A::g; //method pointer; obvious why this is undesirable
//...
;
所需的、不受支持的语法
void f()
A a;
using a;
//invalid/unsupported use of keyword
void f()
A a;
[&a]
//...
//lambdas only bring members into scope for keyword this
();
【问题讨论】:
你想用这个来完成什么?你基本上没有封装,我看不到人们试图这样做。 FWIW,对于类成员变量,您可以使用 structured binding 以更容易获取别名。 它只是节省了大量的打字工作。我使用数据导向,所以封装对我来说不是问题。 结构化绑定很接近,但我希望绑定与其引用具有相同的名称,因此键入 auto& [x,g]= ax, &a:: G ;此外,它不能为每个类成员自动绑定。 【参考方案1】:这既不是令人满意的解决方案,也不是对读者友好的解决方案。显式声明引用比这样做要好得多。 但是,它只需要将变量显式地带入范围一次。 wrangler 的方法用作范围块。
struct wrangler
T& a;
void(A::*g)()= &A::g;
void f()
//...
【讨论】:
以上是关于C++ 将方法和字段带入外部范围,无需显式引用的主要内容,如果未能解决你的问题,请参考以下文章
将外部 Javascript 与在全局(窗口)范围内定义方法隔离开来
_variant_t 范围指针的 C++ 文字自动化问题(AddPicture() 方法)