Re: How to get BaseEnumType?

2015-08-31 Thread drug via Digitalmars-d-learn

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!


Re: How to get BaseEnumType?

2015-08-31 Thread Enamex via Digitalmars-d-learn

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?


Re: How to get BaseEnumType?

2015-08-31 Thread wobbles via Digitalmars-d-learn

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 :)


Re: How to get BaseEnumType?

2015-08-31 Thread drug via Digitalmars-d-learn

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?


Re: How to get BaseEnumType?

2015-08-31 Thread wobbles via Digitalmars-d-learn

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 }



How to get BaseEnumType?

2015-08-31 Thread drug via Digitalmars-d-learn

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.