Unary Plustemplate<typename T> quaternion<T> operator + (quaternion<T> const & q); This unary operator simply returns q. Unary Minustemplate<typename T> quaternion<T> operator - (quaternion<T> const & q); This unary operator returns the opposite of q. Binary Addition Operatorstemplate<typename T> quaternion<T> operator + (T const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator + (quaternion<T> const & lhs, T const & rhs); template<typename T> quaternion<T> operator + (::std::complex<T> const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator + (quaternion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> quaternion<T> operator + (quaternion<T> const & lhs, quaternion<T> const & rhs);
These operators return Binary Subtraction Operatorstemplate<typename T> quaternion<T> operator - (T const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator - (quaternion<T> const & lhs, T const & rhs); template<typename T> quaternion<T> operator - (::std::complex<T> const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator - (quaternion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> quaternion<T> operator - (quaternion<T> const & lhs, quaternion<T> const & rhs);
These operators return Binary Multiplication Operatorstemplate<typename T> quaternion<T> operator * (T const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator * (quaternion<T> const & lhs, T const & rhs); template<typename T> quaternion<T> operator * (::std::complex<T> const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator * (quaternion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> quaternion<T> operator * (quaternion<T> const & lhs, quaternion<T> const & rhs);
These operators return Binary Division Operatorstemplate<typename T> quaternion<T> operator / (T const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator / (quaternion<T> const & lhs, T const & rhs); template<typename T> quaternion<T> operator / (::std::complex<T> const & lhs, quaternion<T> const & rhs); template<typename T> quaternion<T> operator / (quaternion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> quaternion<T> operator / (quaternion<T> const & lhs, quaternion<T> const & rhs);
These operators return Equality Operatorstemplate<typename T> bool operator == (T const & lhs, quaternion<T> const & rhs); template<typename T> bool operator == (quaternion<T> const & lhs, T const & rhs); template<typename T> bool operator == (::std::complex<T> const & lhs, quaternion<T> const & rhs); template<typename T> bool operator == (quaternion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> bool operator == (quaternion<T> const & lhs, quaternion<T> const & rhs);
These return true if and only if the four components of Inequality Operatorstemplate<typename T> bool operator != (T const & lhs, quaternion<T> const & rhs); template<typename T> bool operator != (quaternion<T> const & lhs, T const & rhs); template<typename T> bool operator != (::std::complex<T> const & lhs, quaternion<T> const & rhs); template<typename T> bool operator != (quaternion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> bool operator != (quaternion<T> const & lhs, quaternion<T> const & rhs);
These return true if and only if Stream Extractortemplate<typename T, typename charT, class traits> ::std::basic_istream<charT,traits>& operator >> (::std::basic_istream<charT,traits> & is, quaternion<T> & q);
Extracts a quaternion q of one of the following forms (with a, b, c and d
of type
The input values must be convertible to
Returns: The rationale for the list of accepted formats is that either we have a list of up to four reals, or else we have a couple of complex numbers, and in that case if it formated as a proper complex number, then it should be accepted. Thus potential ambiguities are lifted (for instance (a,b) is (a,b,0,0) and not (a,0,b,0), i.e. it is parsed as a list of two real numbers and not two complex numbers which happen to have imaginary parts equal to zero). Stream Insertertemplate<typename T, typename charT, class traits> ::std::basic_ostream<charT,traits>& operator << (::std::basic_ostream<charT,traits> & os, quaternion<T> const & q);
Inserts the quaternion q onto the stream template<typename T, typename charT, class traits> ::std::basic_ostream<charT,traits>& operator << ( ::std::basic_ostream<charT,traits> & os, quaternion<T> const & q) { ::std::basic_ostringstream<charT,traits> s; s.flags(os.flags()); s.imbue(os.getloc()); s.precision(os.precision()); s << '(' << q.R_component_1() << ',' << q.R_component_2() << ',' << q.R_component_3() << ',' << q.R_component_4() << ')'; return os << s.str(); } |