C++"extension methods"标准化的建议在哪里?
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++提案?如果是这样,有人可以指出我的提案及其状态/时间表吗?
有一个
关于统一(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();
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 此递归函数的每次迭代的值存储在哪里?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在哪里存储跨平台C++应用存储?
- C++泛型类错误,问题出在哪里?
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 模板参数在 C++ 中存储在哪里?
- 我的重复检查代码中的错误究竟在哪里?
- 在哪里可以找到 std::bitset 的数据成员?
- C++"extension methods"标准化的建议在哪里?