fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. using namespace std;
  4.  
  5. struct Vector{};
  6. struct SubVector{};
  7. struct StrangeVector{};
  8.  
  9. template<class T> struct is_vector_type : false_type{};
  10. template<> struct is_vector_type<Vector> : true_type{};
  11. template<> struct is_vector_type<SubVector> : true_type{};
  12. template<> struct is_vector_type<StrangeVector> : true_type{};
  13.  
  14. template <typename T1, typename T2>
  15. typename std::enable_if<is_vector_type<T1>::value && is_vector_type<T2>::value, const Vector>::type
  16. operator +(const T1 &t1, const T2 &t2){
  17. cout << "Addiere 2 Vektoren\n";
  18. return Vector();
  19. }
  20.  
  21. template <typename T1, typename T2>
  22. typename std::enable_if<is_vector_type<T1>::value && is_arithmetic<T2>::value, const Vector>::type
  23. operator *(const T1 &t1, const T2 &t2){
  24. cout << "Multipliziere einen Vektor mit einem zahlartigen Datentyp\n";
  25. return Vector();
  26. }
  27.  
  28. template <typename T1, typename T2>
  29. typename std::enable_if<is_arithmetic<T1>::value && is_vector_type<T2>::value, const Vector>::type
  30. operator *(const T1 &t1, const T2 &t2){
  31. cout << "Multipliziere einen zahlartigen Datentyp mit einem Vektor auf clevere/faule Weise!\n";
  32. return t2 * t1;
  33. }
  34.  
  35. int main(){
  36. 6 * Vector();
  37. }
  38.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
Multipliziere einen zahlartigen Datentyp mit einem Vektor auf clevere/faule Weise!
Multipliziere einen Vektor mit einem zahlartigen Datentyp