C宏元编程

C宏元编程,第1张

概述我有以下代码: 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:: 我有以下代码:
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宏元编程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存