提问者:小点点

替换Std::Greater和其他


在我的C++代码中,我写了两个函数,我可以用它们作为函数的参数。 像这样:

template<class T>
class MyGreater{
public:
    bool operator()(const T &value1, const T &value2) {
            return value1 > value2;
    }
};

template<class T>
class MyEquall{
public:
    bool operator()(const T &value1, const T &value2) {
            return value1 == value2;
    }
};

但是现在我想像其他4个写的一样来涵盖所有这些:<<;,<=,>>,>=,==,!=这是不是意味着我需要为每个人写4个不同的类?

重要提示:我知道我可以使用std::greater等等,但是我的教授不允许这样做,并告诉我们自己编写代码。

我用的是C++11,我想坚持用函子


共1个答案

匿名用户

如果你的教授不允许使用预处理器,你就可以省去一些乏味的样板:

#define DEFINE_MY_GENERIC_OP(CLASS_NAME, OP)                  \
template<class T>                                             \
class CLASS_NAME{                                             \
public:                                                       \
    bool operator()(const T &value1, const T &value2) const { \
            return value1 OP value2;                          \
    }                                                         \
}

然后像这样使用它

DEFINE_MY_GENERIC_OP(MyGreater, >);
DEFINE_MY_GENERIC_OP(MyEquall, ==);
// etc

我通常不会建议使用预处理器,但是由于您面临着一个愚蠢的要求,它迫使您单调地重复相同的标记,因此它似乎有点合适。

如果这种方法也被禁止,那么不幸的是,您必须详细说明每个运算符。