On Saturday, 18 March 2017 at 15:16:35 UTC, Basile B. wrote:
On Saturday, 18 March 2017 at 13:30:22 UTC, Hussien wrote:
On Saturday, 18 March 2017 at 13:16:49 UTC, Adam D. Ruppe
wrote:
On Saturday, 18 March 2017 at 13:06:56 UTC, Hussien wrote:
So you are telling me there is no way to do this easily?
What are you actually trying to do?
Glad you asked! It is very simple: I am trying to get the
underlying D type from a type that I have.
interface X; => dtype!(X) == "interface"
enum X; => dtype!(X) == "enum"
class X; => dtype!(X) == "class"
struct X; => dtype!(X) == "struct"
union X; => dtype!(X) == "union"
wchar* X; => dtype!(X) == "wchar*"
int X; => dtype!(X) == "int"
void function() X; => dtype!(X) == "function*"
void X(); => dtype!(X) == "function"
etc..
etc..
The very right terms should only be terms that are listed in
the D grammar as types besides the *'s. If a type is a pointer
to a _type_, dtype should return _type_*, etc.
The problem with enums is that it contains several stuff. It's
actually a storage class. enums can be
- named enum
- anonymous enum
- manifest constant
- lambda
- templates
The others stuff are easy to retrieve, like you've been said
earlier.
I'm just going to use what Mike Parker suggested. I'll fill in
the types I need as necessary. Luckily I do not need to many and
I will tweak for my needs. I was hoping for a general solution. I
simply need some way to pass around the base type in a string
since I cannot pass a generic arbitrary type.
obviously a lambda would return "lambda", a template should
return template, etc.
Manifest constant could return "manifest constant". I don't care
about the exact value as long as I can pass it around and use it
and there is always a one to one correspondence.