簡體   English   中英

C ++中“擴展方法”標准化的提案在哪里?

[英]Where is the proposal for standardization of “extension methods” in C++?

我忘記了用於描述我在大約一年(可能更多)之前看到的提案中使用的功能的確切術語。 它看起來類似於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 ++的提議引入了這種機制? 如果是這樣,有人可以指出我的建議,可能還有它的狀態/時間表嗎?

有一個針對C ++的Unified(var Uniform)調用語法的提議。 從10,000英尺的PoV,它將允許擴展方法a 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM