Different typeof syntax
Robert Clipsham
robert at octarineparrot.com
Sun May 16 15:11:59 PDT 2010
On 16/05/10 21:43, bearophile wrote:
> Do you know if it's possible to replace typeof(f1) with f1.typeof in D (for symmetry with sizeof too)?
>
> import std.stdio: writeln;
> struct Foo {
> int x;
> }
> void main() {
> Foo f1;
> int fsize = f1.sizeof; // OK
> alias typeof(f1) T1; // OK
> alias f1.typeof T2; // ERR
> }
>
>
> [What I'd like is this, but this is for another thread:
> Type T2 = f1.typeof;
> ]
>
> Bye,
> bearophile
The closest I've managed with my quick attempt is:
----
mixin template typeOf()
{
alias typeof(this) typeOf;
}
struct Foo
{
int x;
mixin typeOf;
}
void main() {
Foo f1;
auto fsize = f1.sizeof; // OK
alias typeof(f1) T1; // OK
alias f1.typeOf T2; // OK
}
----
It's not ideal, but it works. You can choose a capitalization to suit
you. If you want the capitalization to match you can make a similar
template for sizeof to keep things consistent.
A couple of other things to note, I changed fsize to auto, as the type
of .sizeof is different on x86_64, this isn't an issue now, but it's
nice to keep code portable! Another thing is template bloat - I haven't
looked properly, it seems that the template is optimized out though, so
using it doesn't add any overhead... I could be wrong though.
Robert
More information about the Digitalmars-d-learn
mailing list