How to partially forward properties of struct array member to struct (disable length property) ?

ParticlePeter via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Sep 6 03:12:57 PDT 2015


On Sunday, 6 September 2015 at 08:48:32 UTC, bioinfornatics wrote:
> On Sunday, 6 September 2015 at 07:34:36 UTC, ParticlePeter 
> wrote:
>> I am working on a struct vector. The data is stored in a 
>> member static array and I want to be able to forward all array 
>> properties except length to vector.
>> Reason is I have free functions f that take vector(s) as 
>> arguments, such that f(vector) and vector.f via UFCS is 
>> possible. Using alias array this in the case of length 
>> function/array property is problematic, as length(vector) 
>> obviously uses the free function but vector.length the array 
>> property.
>>
>> What would be the simplest way to disable the array.length 
>> property for the vector struct?
>>
>> I would prefer not to implement length as a vector member 
>> function and call it inside the free function as this is 
>> inconsistent with the other free funcs.
>
> Hi,
>
> If you are looking for somethin like delegator from ruby: 
> http://ruby-doc.org/stdlib-2.0.0/libdoc/forwardable/rdoc/Forwardable.html

No, not this one. It is O.k. for vector to be implicitly 
converted to an array, and in such a case array property length 
should be used.

> Or by using mixin delegates: 
> http://forum.dlang.org/post/jitn9v$20u4$1@digitalmars.com

I think this approach (in particular Jacobs suggestion) would be 
useful if I would like to forward array member properties for lot 
of different struct/classes  but for now it is sufficient for the 
vector struct.

I took a look at opIndex, opSlice, opIndexAssign and 
opIndexOpAssign but find the examples very confusing. Also its 
not clear for me which of these operators I have to implement to 
have full array functionality on the vector struct.
In the end all that I want is "just" to disable access to 
array.length through vector and alias this array.



More information about the Digitalmars-d-learn mailing list