The main thing is that we still want templated specialisations of the train
methods. Not sure that works with this other approach? But would have to
check...
I think we could think of the proposed solution as a mix of the double
dispatching (for feature type, string, dense, etc) and the mix ins for the
template method overloading...or?

On Tue, 26 Jun 2018 at 12:07, Fernando J. Iglesias García <
fernando.iglesi...@gmail.com> wrote:

> A different idea to using mix-ins for dispatching:
> https://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_in_C++
> In a nutshell the idea is that on calling CMahine::train(CFeatures* f) we
> use some method in the hierarchy of CFeatures that works out the
> "downcast". It feels a bit like Shogun's obtain_from_generic, though a key
> difference is that obtain_from_generic is static.
>
> What do you think?
>
> On Mon, 25 Jun 2018 at 17:55, Heiko Strathmann <heiko.strathm...@gmail.com>
> wrote:
>
>> feedback welcome.
>>
>> https://gist.github.com/karlnapf/95a9c72a642d61ec268a39407f8761b2
>>
>> Problem:
>> currently, dispatching happens inside train_machine of algorithm
>> specializations: redundant code, error prone, might be forgotten at all
>> Actually, only LARS, LDA do this, most other classes do nothing, i.e.
>> crash/error when something else than float64 is passed (bad)
>> LARS/LDA solved this via making the train method templated and then
>> dispatch inside train_machine.
>>
>> Solution we propose (result of a discussion with Viktor last week,
>> refined in a meeting with Giovanni and Shubhab today): Use mixins to keep
>> dispatching code in algorithm specializations, this allows for templated
>> train methods and gives a compile error if they are not implemented by the
>> algorithm author. Yet we can centralize the code to make algorithm
>> specialisations nicer and less error prone. See gist.
>> We will have to think how all this works with multiple feature types
>> (string, etc), and also how multiple mix-ins can be combined (e.g. LARS is
>> a LinearMachine, IterativeMixIn, DenseTrainMixIn, and it would be the
>> 'iteration' method that would be templated.
>> Shubham will draft a compiling minimal example for this.
>>
>>
>> First attempt (doesnt work)
>> Move dispatching into base class CMachine. Call templated train methods
>> there which are overloaded in subclass. BUT cannot have virtual templated
>> methods, so this wont fly.
>>
>>
>> H
>>
> _______________________________________________
>> shogun-team mailing list
>> shogun-t...@shogun-toolbox.org
>> https://nn7.de/cgi-bin/mailman/listinfo/shogun-team
>>
> --
Sent from my phone

Reply via email to