首页 > 解决方案 > 如何使用宏定义多个运算符

问题描述

我将使用单个宏在一个宏中为数组设置==! =>、等。>=

#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

如何修改它以使用宏定义不同的运算符?

标签: c++

解决方案


operator是 C++ 关键字。避免使用它以避免编译问题。标准做法是对所有宏参数使用全大写;例如

#define COMPARE(OPERATOR, FUNCTION) \ ...

此外,这里的##部分是不需要的,因为您的代码中没有发生字符串连接。只需OPERATOR按原样使用参数。


推荐阅读