How do you test whether a variable is static or not?
Bauss
jj_1337 at live.dk
Sat Jun 16 12:21:18 UTC 2018
On Saturday, 16 June 2018 at 08:52:20 UTC, DigitalDesigns wrote:
> On Saturday, 30 July 2016 at 13:04:56 UTC, Ali Çehreli wrote:
>> On 07/30/2016 05:47 AM, Jonathan M Davis via
>> Digitalmars-d-learn wrote:
>> > I'm writing some serialization code where I need to skip
>> static variables.
>> > So, I have a symbol from a struct, and I'd like to test
>> whether it's static
>> > or not.
>>
>> static variables don't have the .offsetof property:
>>
>> struct S {
>> int a;
>> static int b;
>> }
>>
>>
>> // Bonus question: should field be alias or string?
>> template isStaticVar(T, alias field)
>> {
>> enum isStaticVar = !__traits(compiles, mixin("T." ~ field
>> ~ ".offsetof"));
>> }
>>
>> void main() {
>> static assert (!isStaticVar!(S, "a"));
>> static assert (isStaticVar!(S, "b"));
>> }
>>
>> Ali
>
> This doesn't work, treats fields in base classes as static.
>
> One way to test if a member is static is if it it doesn't exist
> in tupleof... but this only returns the immediate members and
> so will fail. I guess one will have to check all base types
> too and if it doesn't exist in any of then it should be static.
>
> Why is it so hard to be able to get basic information like if a
> type is static or not?
Probably because the symbols don't carry the information. I'd
reckon a compiler addition to __traits() would probably solve
this. Something like getStaticMembers
More information about the Digitalmars-d-learn
mailing list