On Tuesday, 9 August 2016 at 15:41:08 UTC, Steven Schveighoffer
wrote:
Well, you can via properties:
@property int* tabp() { return tab.ptr; }
tabp[elem];
This is nice. The best would be to have it with the same name as
original symbol, but I can't imagine how it could be done.
Essentially, tab is a symbol that points at some undetermined
number of elements. Since it's undetermined, D doesn't allow
safe easy access.
If you did int *tab, then it would think the symbol points at a
pointer.
tab.ptr is a shortcut to &tab[0].
You could potentially do int tab, and then use (&tab)[elem].
Or if you know the number of elements, you can just declare
them.
If it were me, I'd access it via tab.ptr, because it *is* an
unsafe operation and I'd want to highlight that for future
readers.
If something defines tab's length, I'd highly recommend
wrapping the two:
extern(C) int tabLength(); // mythical mechanism or no?
@property int[] dtab { return tab.ptr[0 .. tabLength]; }
And this is even better. However, I suppose you are right and I
should stick to `tab.ptr`.