Getting the initial value of a class field in compile time.
Steven Schveighoffer
schveiguy at gmail.com
Sun Feb 9 02:25:56 UTC 2020
On 2/8/20 7:39 PM, realhet wrote:
> On Sunday, 9 February 2020 at 00:15:47 UTC, Drug wrote:
>> On Saturday, 8 February 2020 at 23:37:56 UTC, realhet wrote:
>>> Hello,
>>>
>>> class A{
>>> int i = 42;
>>> }
>>>
>>> Is there a way to get that 42? (Input is the class A and the name of
>>> the field 'i')
>>>
>>> A.i.init returns 0, so it doesn't care about the class.
>>>
>>> classinfo.m_init can be an option, but maybe there's a nicer way to
>>> do this?
>>>
>>> Thx!
>>
>> Try A.init.i
>
> I tried and A.init.stringof == "void()"
>
> That generates a new question, what is void() ?
> It has no sizeof property.
> I guess it's the voidest of the voids in D :D
Looks like you wrote a function void init() inside your class.
Don't do that. D has a default init property.
But as an aside, A.init has a value of null. So A.init.i => segfault.
The 42 lives inside the intializer, which is a void array stored in the
TypeInfo. But you probably don't want to get it that way.
Adam's way is technically a good way to get it. But you don't
necessarily need that (and it might not be what you are looking for --
the constructor could easily change i to a different value). Problem is
that typeid cannot be read at compile time.
https://issues.dlang.org/show_bug.cgi?id=7147
If you could do that, you could construct a "pre-constructed" class
instance, and use it as the prototype for reading the int value.
-Steve
More information about the Digitalmars-d-learn
mailing list