C++"extension methods"标准化的建议在哪里?

Where is the proposal for standardization of "extension methods" in C++?

本文关键字:在哪里 标准化 extension methods C++      更新时间:2023-10-16

我忘记了用于描述大约一年(也许更多(前看到的提案中使用的功能的确切术语。 它看起来类似于 C# 扩展方法,因为可以使用类成员语法调用定义为类接口一部分的全局函数。非常非常愚蠢的例子:

class Foo
{
public:
    void One();
};
void Two(Foo&);
int main()
{
    Foo f;
    f.One();
    f.Two(); // This was valid in the proposal I saw
}

我确定我的代码示例很遥远,但我更多地使用它来尝试传达我记得看到的功能。我是完全不在这里,还是那里有引入这种机制的C++提案?如果是这样,有人可以指出我的提案及其状态/时间表吗?

有一个

关于统一(var Uniform(调用语法的建议,用于C++。从 10,000 英尺的 PoV 开始,它将允许扩展方法,就像 C# 一样,以及真正混合给定对象的方法调用和函数调用之间的差异。

以下是此功能的外观简短说明

https://isocpp.org/blog/2016/02/a-bit-of-background-for-the-unified-call-proposal

据我所知,它没有进入 C++17(太晚了?(,等待 c++2x

Roger Orr和我在2015年提出了向C++(17(添加扩展方法:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf

(语言(进化小组不相信这是他们渴望追求的方向。

我认为 C# 中的扩展方法是一个很好的功能,但这似乎并不是一个普遍公认的事实。

我不打算重新提出C++20的提案。

小结

(应Einpoklum的要求(

统一调用语法提出成员函数可以用自由函数语法调用:

void foo(const A& a);
class B { void foo(); };
A a;
foo(a); // calls foo(const A&);
B b;
foo(b); // calls b.foo();

扩展方法提出可以使用成员函数语法调用适当编写的自由函数:

void foo(const A& this); // note the name `this` is important
class B { void foo(); };
A a;
a.foo(); // calls foo(const A&);
B b;
b.foo(); // calls b.foo();