Content deleted Content added
Moved "rust usage of the term" to the end of the article, as an incorrect use does not deserve being above the fold. |
|||
Line 4:
== C++ proposal ==
It has been proposed (as of 2016) for addition to C++ by [[Bjarne Stroustrup]]<ref>{{cite web|title="UFCS proposal"|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf|format=PDF|website=Open-std.org|accessdate=1 October 2017}}</ref> and [[Herb Sutter]]<ref name="auto"/>, to reduce the ambiguous decision between writing [[free function (c++)|free function]]s and member functions, to simplify the writing of [[generic programming|templated code]]. Many programmers are tempted to write member functions to get the benefits of the member function syntax (e.g. "[[dot-autocomplete]]" to list [[member function]]s);<ref>{{cite web|title=using intellisense|url=https://msdn.microsoft.com/en-us/library/hcw1s69b.aspx|website=Msdn.microsoft.com|accessdate=1 October 2017}}</ref> however, this leads to excessive [[Coupling (computer programming)|coupling]] between [[Class (computer programming)|classes]].<ref>{{cite web|title="How Non-Member Functions improve encapsulation|url=http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197|website=Drdobbs.com|accessdate=1 October 2017}}</ref>
== Rust usage of the term ==▼
Until 2018 it was common to use this term when actually referring to the ''[https://doc.rust-lang.org/book/2018-edition/ch19-03-advanced-traits.html?highlight=trait,function,call#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name Fully Qualified Syntax for Disambiguation].'': In Rust many traits can implement functions with the same name for a given type, so a mechanism is required to tell the compiler which one it should use.▼
Member functions can also be used as free functions by accessing them through the type.▼
The term UFCS is incorrect for these uses, as it allows using methods as (namespaced) free functions, but not using free functions as methods.▼
== Examples ==
Line 60 ⟶ 53:
v5 = v1.add(v2).add(v1)
</source>
▲== Rust usage of the term ==
▲Until 2018 it was common to use this term when actually referring to the ''[https://doc.rust-lang.org/book/2018-edition/ch19-03-advanced-traits.html?highlight=trait,function,call#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name Fully Qualified Syntax for Disambiguation].'': In Rust many traits can implement functions with the same name for a given type, so a mechanism is required to tell the compiler which one it should use.
▲Member functions can also be used as free functions by accessing them through the type.
▲The term UFCS is incorrect for these uses, as it allows using methods as (namespaced) free functions, but not using free functions as methods.
==See also==
|