How to create a template class using foreach delegate to filter objects in a member function call?
Robert M. Münch
robert.muench at saphirion.com
Sat Jun 1 14:24:11 UTC 2019
On 2019-06-01 04:43:13 +0000, Alex said:
> That's ok, but could you provide an example anyway? Is it like this?
>
> ´´´
> void main(){
> auto target = new myClass!int();
> target.objects.length = 4;
> auto val = 42;
> put(target, val, testfunction); // does the test function enters here?
> put(target, val);
> auto f = myFilter!int; // where do you want to use this entity?
> }
> ´´´
myClass shouldn't be subclassed, only just used.
The myFilter struct is the implementation which myClass.put() should
use to iterate over all objects. All things being only examples. So,
the idea is, that I can provide a delegate which foreach(...;
myFilter(objects)) uses. Like a run-time plug-in.
> Do you have control about the contained classes? If so, it is a hint to
> implement the testing inside them. Like:
>
> /* probably inside a templated mixin */
> bool testfunction(inputs){...}
>
> class myOtherClass(/*probably templated*/){... mixin testfunction ... &
> provide a put function}
I thought about a mixin too. But this requires an understanding of how
myClass works. Which I what I want to avoid.
> * So, you are not totally against the idea of modifying the foreign
> library, but you want to keep modifications small?
Yes, because myClass is some external lib, which can be changed to
support this approach here. But not more.
> With the approach now, you could, for example, handle compile time
> blocks inside the put function in the myClass and dynamical ones inside
> the myOtherClasses. class myClass(E){/* inserted put function */ void
> put(...){static if put action is at all possible --> put. }}
As said, KISS and really just want to provide a plug-in which is used
to iterate of a sequence I provide from the outside.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster
More information about the Digitalmars-d-learn
mailing list