Free functions versus member functions

Bill Baxter dnewsgroup at billbaxter.com
Wed Oct 10 18:58:09 PDT 2007


Walter Bright wrote:
> Continuing the discussion from the thread "questions on PhanTango 
> 'merger'":
> 
> Lars Ivar Igesund wrote:
>  > It is not as if such functions are non-existant in Tango, so which exact
>  > functionality do you think is better expressed through free standing
>  > functions rather than objects? The answers of others shows that this
>  > usually is wanted for objects where you often need only one operation on
>  > the given object, even if others are available. This don't remove the 
> fact
>  > that an object (class) equally often is a useful abstraction, and 
> when that
>  > is established, free standing functions usually should be implemented as
>  > wrappers around each method on the object, rather than the object being
>  > implemented via free standing functions. This is why Tango looks as 
> it does
>  > today; we have avoided wrappers of our own code if possible, because 
> they
>  > degrade orthogonality of the API, and add more code to maintain. 
> Whether we
>  > have been to strict in enforcing that stance, is an open question.
> 
> I've been stumped by this design issue before. Should functionality be 
> done as a set of free functions, or as member functions? I remember 
> going over this with Matthew Wilson, and he resolved it by implementing 
> two parallel sets of interfaces: one free, the other member. I thought 
> that doing both was a copout, but couldn't figure out which one was right.
> 
> I eventually ran across this article by Scott Meyers 
> http://www.ddj.com/cpp/184401197
> which made a lot of sense. It gives some good guidelines to use to make 
> such decisions, and backs it up with reasoning that I find compelling.
> 
> Isn't it funny how we've completed the circle? We went from all free 
> functions in C, to all member functions in C++, and now back to free 
> functions? <g>

 From the fine article:
"""
Herb Sutter has explained that the "interface" to a class (roughly 
speaking, the functionality provided by the class) includes the 
non-member functions related to the class, and he's shown that the name 
lookup rules of C++ support this meaning of "interface" [7,8].
"""

Do D's name lookup rules similarly support that meaning of "interface"?
(I'm not sure what the Herb was talking about but I'm guessing he meant 
things like preferring the most-derived type for overloads and argument 
dependent lookup.)

--bb



More information about the Digitalmars-d mailing list