咨询C++中“扩展方法”标准化提案位置及相关特性
C++扩展方法相关提案与术语说明
嘿,我刚好对这个话题有点了解,来给你梳理一下:
首先,你提到的这个和C#扩展方法类似、允许用成员语法调用非成员函数的特性,在C++提案里最常用的术语就是扩展方法(Extension Methods),部分提案也会用“成员式调用非成员函数”来描述,和你记忆的功能完全匹配。
关于标准化提案的情况:
- 目前这个特性还没有正式纳入C标准(截至C23),但有几个核心提案一直在推进相关设计,其中最贴合你需求的是 P1169R0 "Extension Methods for C++"——这个提案直接对标C#的扩展方法,允许将全局或命名空间内的函数标记为扩展方法,从而支持像你示例里那样的
f.Two()调用。 - 更早的 P0447R2 "Extension Expressions" 是相关的早期尝试,不过它的设计更偏向表达式层面的扩展,和你想要的成员式调用逻辑略有区别。
- 后续还有 P2086R1 "Allow invoking non-member functions as if they were members",进一步细化了非成员函数以成员语法调用的规则和场景。
举个更贴合提案写法的例子(以P1169为例):
class Foo { public: void One(); }; // 用extension关键字标记为Foo的扩展方法 extension void Two(Foo& f) { // 函数实现逻辑 } int main() { Foo f; f.One(); // 常规成员函数调用 f.Two(); // 合法的扩展方法调用 }
这些提案目前仍在标准化讨论流程中,后续可能会有设计调整,或者合并到其他更大的特性提案里。
内容的提问来源于stack exchange,提问作者void.pointer
相关产品推荐
相关产品推荐

