opDispatch(string name, E...) (E e) question.
bls
bizprac at orange.fr
Sun Mar 25 14:34:58 PDT 2012
On 03/25/2012 02:04 PM, James Miller wrote:
> On 26 March 2012 09:45, bls<bizprac at orange.fr> wrote:
>> How do I "call" opDispatch(string name, E...)(E elements) ?
>> What I want to archive is to call f.i. fm.list with an arbitrary number of
>> arguments without using
>>
>> fm.list(1, "abc", 4L, 3.33);
>>
>> Instead I would prefer
>> fm.list = (1, "abc", 4L, 3.33);
>
> You can use @property on opDispatch to use setter/getter notation,
> however I wouldn't rely on that functionality long-term if you want to
> keep the same function-call syntax (since -property flag is supposed
> to enforce proper parenthesis use on `@property`s).
>
>> fm.list = (1, "abc", 4L, 3.33);
>
> I'm hoping you mean `fm.list = [1, "abc", 4L, 3.33];` I think that
> using the right template parameters, you can use the same code for
> (T...)(T el) and (T)(T[]), I just can't remember what that is...
>
Ouch, yep, I mean [1, "abc", 4L, 3.33]
But I have no clue how to implement it.
>> Another question :
>> How do I bring in :
>>
>> opDispatch(string name, T) (T[] t)
>
> --
> James Miller
(T) (T[] t) AND (T) (T t) seems not to work.
snip
struct FlexMap
{
Variant[] [string] map;
Variant[] opDispatch(string name)()
{
return map[name];
}
Variant[] opDispatch(string name, E...)(E elements)
{
foreach(element; elements)
map[name] ~= to!Variant(element);
return properties[name];
}
Variant[] opDispatch(string name, T) (T t)
{
map[name] ~= to!Variant(t);
return map[name];
}
// No go
Variant[] opDispatch(string name, T) (T[] t) {}
}
More information about the Digitalmars-d-learn
mailing list