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