A
alariq
Hello, i have a class Builder and several objects to build.
Builder {
A* buildA();
B* buildB();
C* buildC();
D* buildD();
//... more objects may come
}
there may be more classes to build in future. Some classes has to be
created in one way(A,B, ...) and others(C,D,,) in another way.
I am thinking of templates, but i can only specialize them for 1 class
so if even A and B should behave in the same way I should manually
specialize template for them
like this:
Builder {
template <typename T> T* build();
};
template<> A* Builder::build<A>() { // do job1 }
template<> B* Builder::build<B>() { // do same job1 }
template<> C* Builder::build<C>() { // do job2 }
template<> D* Builder::build<D>() { // do same job2 }
so anyway 4 functions instead of 2.
i also was thinking about making common parent for (A & B) and (C &
D) and use it as second template parameter but there is no partial
specialization for functions and i do not wand to make same parent
because A and B are not really similar thay just have to be created in
same way (this also applies for D and D)
maybe someone can give me an advice?
p.s. just fugured out that i can create build1() and build2() template
member functions and call them, but it would be better to have only
one.
p.p.s other way is to specialize build() 4 times to call build1/build2
depending on its type - ugly but specialization code will be small,
e.g.
template<> A* Builder::build<A>() { build1<A>(); }
template<> B* Builder::build<B>() { build1<B>(); }
template<> C* Builder::build<C>() { build2<C>() }
template<> D* Builder::build<D>() { build2<D>() }
but anyway it is not very clear solution, i guess...
is there any other?
Thanks!
Builder {
A* buildA();
B* buildB();
C* buildC();
D* buildD();
//... more objects may come
}
there may be more classes to build in future. Some classes has to be
created in one way(A,B, ...) and others(C,D,,) in another way.
I am thinking of templates, but i can only specialize them for 1 class
so if even A and B should behave in the same way I should manually
specialize template for them
like this:
Builder {
template <typename T> T* build();
};
template<> A* Builder::build<A>() { // do job1 }
template<> B* Builder::build<B>() { // do same job1 }
template<> C* Builder::build<C>() { // do job2 }
template<> D* Builder::build<D>() { // do same job2 }
so anyway 4 functions instead of 2.
i also was thinking about making common parent for (A & B) and (C &
D) and use it as second template parameter but there is no partial
specialization for functions and i do not wand to make same parent
because A and B are not really similar thay just have to be created in
same way (this also applies for D and D)
maybe someone can give me an advice?
p.s. just fugured out that i can create build1() and build2() template
member functions and call them, but it would be better to have only
one.
p.p.s other way is to specialize build() 4 times to call build1/build2
depending on its type - ugly but specialization code will be small,
e.g.
template<> A* Builder::build<A>() { build1<A>(); }
template<> B* Builder::build<B>() { build1<B>(); }
template<> C* Builder::build<C>() { build2<C>() }
template<> D* Builder::build<D>() { build2<D>() }
but anyway it is not very clear solution, i guess...
is there any other?
Thanks!