I am creating an algorithm that deals with many different user defined types at once. Each of these types will be assumed to have a func1 and func2 that will be the interface for MyAlgorithm. I can do this using variadic templates:
template <typename... Args>
class MyAlgorithm{
// interact with Args using func1 and func2
};
I can now instantiate MyAlgorithm like so MyAlgorithm<A, B, C, D, E, F, G>. This works, however, I feel as though for my application this may result in too many specializations of MyAlgorithm. In practice, MyAlgorithm may be instantiated first like MyAlgorithm<A, B, B , A, C, D>, then MyAlgorithm<A, A, C, D>, and then MyAlgorithm<C, F D>, and so on.
Unfortunately, the template is instantiated for every combination of Args.
I had an idea that may be able to help, but I haven't gotten it exactly right. Instead of MyAlgorithm taking template parameters, it will deal with a template Proxy class that is specialized to the A, B, Cs.
// no template
class MyAlgorithm{
// interact with Proxy using func1proxy and func2proxy
std::vector<Proxy> Args;
};
template<typename T>
class Proxy{
// define func1proxy and func2proxy using Arg's func1 and func2
std::unique_ptr<T> Arg; // only member
}
Of course this doesn't work because each Proxy specialization is a different class and so MyAlgorithm still needs to be a template class (and std::vector<Proxy> Args can't exist).
Is there a design pattern for what I want to do? Is there a design pattern that reduces the number of class instantiations?
Aucun commentaire:
Enregistrer un commentaire