c++ - 替换 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 并想坚持使用仿函数
解决方案
如果您的教授不允许使用预处理器,您可以省去一些乏味的样板文件:
#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
我通常不会推荐预处理器,但由于您面临一个愚蠢的要求,迫使您繁琐地重复相同的标记,它似乎有点合适。
如果这种方法也被禁止,那么不幸的是,您必须拼出每个运算符。
推荐阅读
- amazon-web-services - AWS - 存储用户能力表
- swift - UICollectionView sizeForItemAt 调用但大小不正确
- haskell - haskell 文档中的“Integral a => Enum (Ratio a)”是什么意思?
- python - 我需要编写一个正则表达式来识别所有以逗号分隔的数字,不包括 4 位数字
- arrays - 将下拉列表链接到数组
- asp.net - 如何更改 SOAP xml 标头中的编码?
- sql - 构建 SQL 查询以根据“状态”及其时间顺序查明堆栈中的记录
- rally - Rally Agile Central 中的嵌套查询
- python - 多维数组到 dict
- c++ - 为什么我的代码不适用于自定义分配器?