Transforming a range back to the original type?
Steven Schveighoffer
schveiguy at yahoo.com
Fri May 4 06:22:44 PDT 2012
On Fri, 04 May 2012 09:06:31 -0400, Jakob Ovrum <jakobovrum at gmail.com>
wrote:
> On Friday, 4 May 2012 at 12:49:35 UTC, Steven Schveighoffer wrote:
>> or more generically:
>>
>> c = new typeof(c)(c.filter!(x => x < 3));
>>
>> ?
>
> That doesn't do the right thing when 'c' isn't a class type, so it's not
> really that generic.
>
> Struct types (the type of `new typeof(c)` is not `typeof(c)`!) and array
> types simply fail with your suggestion.
Structs don't make very good containers. A slice is not really a
container.
But in any case, someone can make a function that's generic with a couple
static ifs.
> I personally haven't decided whether I think a generic convention is
> useful here, but that code doesn't fit the bill.
What exactly are you looking for? I mean, you want the original type
back, so you can reassign, is that all? Something like this should work
for that:
c = makeContainer!typeof(c)(c.filter!(x => x < 3));
Implementation left as an exercise.
-Steve
More information about the Digitalmars-d-learn
mailing list