Bind C++ template specialized with void parameter
Gregor Mückl
gregormueckl at gmx.de
Fri Mar 1 04:57:07 UTC 2024
On Thursday, 29 February 2024 at 10:30:59 UTC, DUser wrote:
> On Wednesday, 28 February 2024 at 22:48:33 UTC, Gregor Mückl
> wrote:
>> ...
>> But how can I bind Wrapper\<void> in D? Specifically, how do I
>> even express that template specialization in D syntax?
>
> Did you mean any of these?
>
> 1. Parameter specialization:
> ```d
> extern(C++, class):
> class Wrapper(T) {...}
> class Wrapper(T : void) {...}
> ```
> 2. Template constraints:
> ```d
> extern(C++, class):
> class Wrapper(T) if(!is(T == void)) {...}
> class Wrapper(T) if(is(T == void)) {...}
> ```
> 3. `static if`:
> ```d
> extern(C++, class)
> class Wrapper(T) {
> static if (!is(T == void))
> private T t;
> private bool valid;
> public final isValid();
> }
> ```
Thanks! This got me unstuck. I've picked the first solution. It
mirrors the C++ code nicely.
The embarrassing part is that I should have known the other two
options, but my head got completely stuck trying to convert C++
to D too literally.
More information about the Digitalmars-d-learn
mailing list