Bartosz Milewski seems to like D more than C++ now :)
QAston
qaston at gmail.com
Fri Sep 20 01:41:33 PDT 2013
On Friday, 20 September 2013 at 08:20:48 UTC, Szymon Gatner wrote:
> The struct was only an example, obviously you can use proper
> class implementations with data hiding etc. You will also get
> at least 1 virtual call because a "concept" is always an
> abstract class.
Direct use of the value type has no indirections.
> That being said, I've been using this technique in other places
> in my code this far too, for example: my C++ ranges (yeah idea
> stolen from D) are templates so can be composed for free but
> there are abstractions like InputRange<> which "erase" (this
> word is stupid btw, no type is erased really) underlying type
> and provide convenient abstraction in places. I also use this
> technique for my std containers. Vector is a std::vector with
> polymorphic allocator, again it holds Allocator<> by value but
> underlying implementation is (often composition) of allocator
> templates. In allocator's case I do explicitly want container
> alloc to be polymorphic type so that my interfaces never depend
> on allocator type.
>
> Difference now for me is that I did sometimes turn value types
> into polymorphic types using this technique (like with
> allocators) but it never occurred to me that other wan can be
> beneficial too.
>
> Well Adapter is suppose to *change* interface to adapt to
> client needs so this is a bit of a strech to call it that here,
> but yeah, this technique called ("external polymorphism" idiom)
> can be used to adapt . This really just is a (smart)pointer
> with a full interface of underlying object (which also adds
> benefit or using "." instead of "->" on target).
Well, I won't argue about naming, for me when a type is a wrapper
which provides desired interface to that type is an adapter :P.
I agree that this idiom is useful and I use it as needed too.
More information about the Digitalmars-d
mailing list