On 03/04/14 00:07, Walter Bright wrote:
Here's Andrei's proposal:

     extern (C++) template nspace() {
         int foo();
     }

It would be accessed in D by:

    nspace!().foo();

A possible enhancement would be to allow (for all templates with no
parameters):

     nspace.foo();

Note that:

     template nspace() {
         extern (C++) int foo();
     }

would not put foo() in a C++ namespace, although it would still be
accessed from D as:

     nspace.foo();

One downside of this proposal is that if we ever (perish the thought!)
attempted to interface to C++ templates, this design would preclude that.

I like using a UDA or pragma better:

@namespace("nspace")
{
    extern (C++) int foo ();
}

Or

pragma(cpp_namespace, "nspace")
{
    extern (C++) int foo ();
}

Then it's also possible to use this syntax:

@namespace("nspace"):

extern (C++) int foo ();

The only advantage I can see with using "template" is that templates can be mixed in, it would be similar to the using declarative in C++.

--
/Jacob Carlborg

Reply via email to