-
Notifications
You must be signed in to change notification settings - Fork 0
/
type_info.d
66 lines (53 loc) · 1.65 KB
/
type_info.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright (C) 2021 by tspike (github.com/tspike2k)
//
// Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/+
DESCRIPTION:
A quick test to see how TypeInfo (runtime time information) works in D.
Note that you cannot compare TypeInfo objects in a @nogc block as
runtime type information in D requires the use of the garbage collector.
+/
import std.stdio;
struct Position
{
float x, y;
};
struct Cat
{
Position pos;
int furColor;
bool striped;
alias pos this;
};
struct Dog
{
Position pos;
int barkVolume;
alias pos this;
}
void main()
{
Cat tim;
Cat alice;
TypeInfo typeTim = typeid(tim);
TypeInfo typeAlice = typeid(alice);
if (typeTim == typeAlice)
{
printf("Tim and Alice are both cats!\n");
}
Dog bruno;
TypeInfo typeBruno = typeid(bruno);
if (typeBruno != typeAlice && typeBruno != typeTim)
{
printf("Bruno is not a cat like Tim and Alice\n");
}
typeof(bruno) rex;
rex.x = 32;
rex.y = 45;
if (typeBruno == typeid(rex))
{
printf("Rex is a dog like Bruno\n");
}
}