Automatic Interface Implementation

Vladimir Panteleev vladimir at thecybershadow.net
Fri Jul 5 16:17:42 PDT 2013


On Friday, 5 July 2013 at 22:54:38 UTC, John Colvin wrote:
> On Friday, 5 July 2013 at 22:33:01 UTC, Vladimir Panteleev 
> wrote:
>> The new "wrap" from std.typecons
>
> Yikes... I'm a native english speaker and pretty confident with 
> D but I can't get my head around what wrap does. It looks 
> suspiciously like the docs were written by a Russian (missing 
> articles :) ).
>
> Any chance you could provide an explanation for me?

I agree, the docs are rather terse. I only know about it because 
quite a while ago, Kenji posted[1] some code including adaptTo. 3 
years later, it made it into Phobos.

What it does, is:

Let's say you have a struct S, and an interface I, which both 
have (some of) the same methods. You'd like to refer to an 
instance of S through the I interface.

Now, a D interface is just a vtable, but structs can't have 
virtual methods or inheritance. To do that (by hand), you'd 
declare a class which inherits from I, contains a copy of S, and 
for each method in I, it implements it by forwarding the call to 
its copy of S.

The wrap function template does this for you - it generates the 
class, instantiates it, initializes its copy of S, and returns an 
I that points to the new class instance.

Feel free to send a pull request to improve the documentation. 
(You can use GitHub's "Edit" button to do it without leaving the 
browser.)

   [1]: 
http://forum.dlang.org/post/mailman.286.1285099532.858.digitalmars-d@puremagic.com


More information about the Digitalmars-d mailing list