在我的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,我想坚持用函子
如果你的教授不允许使用预处理器,你就可以省去一些乏味的样板:
#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
我通常不会建议使用预处理器,但是由于您面临着一个愚蠢的要求,它迫使您单调地重复相同的标记,因此它似乎有点合适。
如果这种方法也被禁止,那么不幸的是,您必须详细说明每个运算符。