tree.h
template<typename Functor, char Operator> class binary_operation : public node { // ... unimportant details ... unsigned evaluate() const; void print(std::ostream& os) const; }; typedef binary_operation<std::plus<unsigned>, '+'> addition; typedef binary_operation<std::multiplies<unsigned>, '*'> multiplication; // ...
tree.cpp
template<typename Functor, char Operator> unsigned binary_operation<Functor, Operator>::evaluate() const { // ... unimportant details ... } template<typename Functor, char Operator> void binary_operation<Functor, Operator>::print(std::ostream& os) const { // ... unimportant details ... } template class binary_operation<std::plus<unsigned>, '+'>; template class binary_operation<std::multiplies<unsigned>, '*'>; // ...
As you can see, there is code duplication between typedefs in the header file and an explicit instance of the template instance in the implementation file. Is there a way to get rid of duplication that does not require putting "everything" in the header file, as usual?
source share