c++ - 如何使用宏定义多个运算符
问题描述
我将使用单个宏在一个宏中为数组设置==
、! =
、>
、等。>=
#define COMPARE(operator, function) \
template <typename T> \
void function(T *compArrayA, T *compArrayB, bool *resArray, int size) { \
for (int i = 0; i <= size; ++i ) { \
resArray[idx] = (compArrayA[idx] ## operator compArrayB[idx]); \
} \
} \
COMPARE(==, eq);
COMPARE(!=, nq);
COMPARE(>=, greater_eq);
我写了上面的代码。这段代码给了我以下错误。
error: "#" not expected here
如何修改它以使用宏定义不同的运算符?
解决方案
operator
是 C++ 关键字。避免使用它以避免编译问题。标准做法是对所有宏参数使用全大写;例如
#define COMPARE(OPERATOR, FUNCTION) \ ...
此外,这里的##
部分是不需要的,因为您的代码中没有发生字符串连接。只需OPERATOR
按原样使用参数。
推荐阅读
- c++ - Visual Studio 2015 - 预构建事件以确定要编译的项目
- reactjs - 在 React Native 中检测活动屏幕
- c# - C++ 等价于 C# OOP if(Boy b is Student)
- java - 使用单独提交的 Java 包提交可执行文件
- c# - VB6 与 .NET 编码问题(阿拉伯语字符)
- hql - HQL 匹配字符串百分比
- asp.net - 如何从 XML 文件将数据绑定到网格视图
- r - 在 R 中编写这个嵌套 for 循环的更好方法是什么?
- git - 将函数源代码添加到源代码控制存储库时如何正确处理 local.settings.json 文件中的机密
- delphi - Delphi Firemonkey Frames - 如何获取框架使用的事件OnEnter和OnExit