Vec& Vec::operator+=(const double x){ return apply([x](double y) {return x + y;});}Vec& Vec::operator-=(const double x){ return apply([x](double y) {return x - y;});}Vec& Vec::operator*=(const double x){ return apply([x](double y) {return x * y;});}Vec& Vec::operator/=(const double x){ return apply([x](double y) {return x / y;});}
这些方法仅在运算符符号上有所不同.有没有办法简化使用宏编写这些方法?
解决方法 是的,这很容易:#define CREATE_OPERATOR(OP) \ Vec& Vec::operator OP##= (const double x) \ { return apply([x](double y) { return x OP y; }); }CREATE_OPERATOR(+)CREATE_OPERATOR(-)CREATE_OPERATOR(*)CREATE_OPERATOR(/)
当然,如果您需要多次重复使用此运算符符号列表,可以使用X macro技巧:
operators.hxx
OPERATOR(+)OPERATOR(-)OPERATOR(*)OPERATOR(/)#undef OPERATOR
你的代码
#define OPERATOR(OP) \ /* same as above */#include "operators.hxx"总结
以上是内存溢出为你收集整理的C宏元编程全部内容,希望文章能够帮你解决C宏元编程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)