I have a class which must be able to hold a type of float, double, long excetera. I would like to overload it in such a way that it can add two instances holding different types.
template <typename T> class F{ public: F(const T & t){a=t;} T a; F & operator+= (const F & rhs); } template<typename T> F<T> F::operator+= (const F & rhs){ a+=rhs.a; return *this This is just pseudo code I've kept out irrelevant bits where I'm actually trying to use this sort of solution.
Now when trying to use:
F<int> first(5); F<int> second(4); first+=second; // Works F<int> third(5); F<float> fourth(6.2); fourth+=third; // wont work I can see why this doesn't work as it assumes the rhs argument is the same type as the lhs. I can also see there are potential problems in performing an operation which is int += long as if the long is big the type would need changing. What I can't seem to find is a nice way to solve the problem. I would appreciate your inputs. Thanks