在c ++中使用特殊字符的自定义运算符

时间:2016-03-20 15:10:01

标签: c++ c++11 macros operator-overloading

我知道自定义运算符不受c ++的官方支持。 我已经知道this来定义自定义运算符。 但是,由于这似乎不适用于包含特殊字符的自定义运算符,我想知道是否有任何安全方法或黑客用于在c ++中创建具有特殊字符(如<-#)的自定义运算符/ p>

1 个答案:

答案 0 :(得分:3)

struct A {
  int x;
};

template<class T>
struct dashed {
  T t;
  template<class U>
  operator U()&&{ return -std::move(t); }
};

template<class T>
dashed<T> operator-(T&& t){return {{std::forward<T>(t)}};}

template<class T>
A& operator<( A& lhs, dashed<T> rhs ) {
  lhs.x = rhs.t.x;
  return lhs;
}

int main() {
  A a{1}, b{2};
  std::cout << a.x << '\n';
  a <- b;
  std::cout << a.x << '\n';
}

live example

一般来说,没有。我可以通过使用其他运算符来破解 <-的这个特定示例