alias of member from pointer to struct?
janderson
askme at me.com
Sun Apr 15 23:34:12 PDT 2007
BCS wrote:
> Reply to Jarrett,
>
>> "BCS" <ao at pathlink.com> wrote in message
>> news:ce0a334394148c94cbf4314a4da at news.digitalmars.com...
>>
>>> Reply to Jarrett,
>>>
>>>> If the static if is not at global scope, you can make a variable
>>>> that points to the member:
>>>>
>>>> const bool pick = false;
>>>>
>>>> struct S
>>>> {
>>>> int i;
>>>> int j;
>>>> }
>>>> void main()
>>>> {
>>>> S* s;
>>>> static if(pick)
>>>> int* var = &s.i;
>>>> else
>>>> int* var = &s.j;
>>>> }
>>> That's what I'm trying to avoid. :(
>>>
>> If you want to avoid the address calculation every time you write
>> "s.i" or "s.j", that's what you'll have to do. Even a macro that
>> expanded to "s.i" or "s.j" would not give you any performance gain.
>>
>
> In this particular case the issue is that I want to be totally sure that
> exactly the same thing os done for each version and avoid the extra
> copy. Come to think of it though, it will probably get optimized to the
> extra variable version anyway. Oh well, I guess I can live with it.
>
Not that it probably matters, but did u try this?
const bool pick = false;
struct S
{
int i;
int j;
static if (pick)
alias i foo;
else
alias j foo;
}
S* s;
...
int m = s.Foo;
More information about the Digitalmars-d-learn
mailing list