www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to get BaseEnumType?

reply drug <drug2004 bk.ru> writes:
Hello
I need to get the type to which I can cast the enum for using with 
foreign library. For example:
```
enum Foo { A = "a", B = "b", }
enum Bar { A = 123, B = 432, }

static assert(is(BaseEnumType!Foo == string));
static assert(is(BaseEnumType!Bar == int));

I guess there is simple answer somewhere but I failed to find it yet.
Aug 31 2015
next sibling parent reply "wobbles" <grogan.colin gmail.com> writes:
On Monday, 31 August 2015 at 07:55:53 UTC, drug wrote:
 Hello
 I need to get the type to which I can cast the enum for using 
 with foreign library. For example:
 ```
 enum Foo { A = "a", B = "b", }
 enum Bar { A = 123, B = 432, }

 static assert(is(BaseEnumType!Foo == string));
 static assert(is(BaseEnumType!Bar == int));

 I guess there is simple answer somewhere but I failed to find 
 it yet.
In std.traits there is the required isX funcitons. import std.stdio; import std.traits; void main(){ static if(isSomeString!Foo){ writefln("String: %s", Foo.A); } static if(isScalarType!Bar){ writefln("Integer: %s", Bar.A); } static if(isSomeString!Bar){ writefln("String: %s", Foo.A); // wont print } static if(isScalarType!Foo){ writefln("Integer: %s", Bar.A); // wont print } } enum Foo { A="a", B = "b" } enum Bar { A=1, B=2 }
Aug 31 2015
next sibling parent "wobbles" <grogan.colin gmail.com> writes:
On Monday, 31 August 2015 at 08:10:35 UTC, wobbles wrote:
 On Monday, 31 August 2015 at 07:55:53 UTC, drug wrote:

 import std.stdio;
 import std.traits;
 void main(){
         static if(isSomeString!Foo){
                 writefln("String: %s", Foo.A);
         }
         static if(isScalarType!Bar){
                 writefln("Integer: %s", Bar.A);
         }
         static if(isSomeString!Bar){
                 writefln("String: %s", Foo.A); // wont print // 
 Bar.A
         }
         static if(isScalarType!Foo){
                 writefln("Integer: %s", Bar.A); // wont print 
 // Foo.A
         }
 }

 enum Foo { A="a", B = "b" }
 enum Bar { A=1, B=2 }
My copy paste got the better of me. The print messages in the last two static ifs shoudl be Bar.A and Foo.A respectively :)
Aug 31 2015
prev sibling parent drug <drug2004 bk.ru> writes:
On 31.08.2015 11:10, wobbles wrote:
 In std.traits there is the required isX funcitons.

 import std.stdio;
 import std.traits;
 void main(){
          static if(isSomeString!Foo){
                  writefln("String: %s", Foo.A);
          }
          static if(isScalarType!Bar){
                  writefln("Integer: %s", Bar.A);
          }
          static if(isSomeString!Bar){
                  writefln("String: %s", Foo.A); // wont print
          }
          static if(isScalarType!Foo){
                  writefln("Integer: %s", Bar.A); // wont print
          }
 }

 enum Foo { A="a", B = "b" }
 enum Bar { A=1, B=2 }
Thank you. But is there a way to check against not predefined type?
Aug 31 2015
prev sibling parent reply "Enamex" <enamex+d outlook.com> writes:
On Monday, 31 August 2015 at 07:55:53 UTC, drug wrote:
 Hello
 I need to get the type to which I can cast the enum for using 
 with foreign library. For example:
 ```
 enum Foo { A = "a", B = "b", }
 enum Bar { A = 123, B = 432, }

 static assert(is(BaseEnumType!Foo == string));
 static assert(is(BaseEnumType!Bar == int));

 I guess there is simple answer somewhere but I failed to find 
 it yet.
Use is(std.traits.OriginalType!Foo == string) maybe?
Aug 31 2015
parent drug <drug2004 bk.ru> writes:
On 31.08.2015 11:12, Enamex wrote:
 On Monday, 31 August 2015 at 07:55:53 UTC, drug wrote:
 Hello
 I need to get the type to which I can cast the enum for using with
 foreign library. For example:
 ```
 enum Foo { A = "a", B = "b", }
 enum Bar { A = 123, B = 432, }

 static assert(is(BaseEnumType!Foo == string));
 static assert(is(BaseEnumType!Bar == int));

 I guess there is simple answer somewhere but I failed to find it yet.
Use is(std.traits.OriginalType!Foo == string) maybe?
Yes, it works, thank you!
Aug 31 2015