我们可以有一个不是基于类型而是基于操作的模板吗?
Can we have a template not on type but on operation
我是c++新手。我目前有两个类具有完全相同的代码,只是在某些时候一个类使用'<'操作符,而其他类使用'>'。
是否有办法合并这些类,并在"操作符"上声明模板?
首先,如果您的问题确实限于<
和>
,那么您可以创建一个基类,接受布尔值声明是否使用其中一个。
class base
{
protected:
base(bool use_less) : m_use_less{less}
some_return_type my_fn(some_args args)
{
...
const bool cmp = m_use_less? a < b: a > b;
...
}
private:
const bool m_use_less;
}
const bool cmp = m_use_less? a < b: a > b;
在你的代码中重复太多次,你可以考虑用一个内联方法来做这件事。
如果你愿意,你可以进一步推广比较,因为许多标准库算法(例如,std::sort
)正是这样做的。
通常,标准库算法按如下方式解决它(以下假设您对整数进行操作):
#include <functional>
// Pass the comparison as a template argument
template<class Compare=std::less<int>>
class my_class
{
private:
// A comparison object
Compare m_cmp;
public:
some_return_type my_fn(some_args args)
{
...
const bool is_less = m_cmp(lhs, rhs);
...
}
};
默认情况下,该类使用<
(通过std::less
)。如果您想使用>
,只需使用std::greater
实例化。
相关文章:
- 确保特征将 AVX 矢量化用于特定操作
- 阵列操作;Fortran 相当于 (:).
- 将 lua 脚本转换为等效于它的指令(操作码)
- 如何使用多态性将相同的操作应用于具有相同基类的不同对象的unordered_sets
- Rcpp 中"List"的操作函数 - 类似于 R 中的"Reduce function"
- C++具有类似于 Python/NumPy 的数组操作的库
- 如何使用 Ruby 的 Enumerable .map 方法在 C++ 中执行类似于 map 的操作
- 犰狳相当于MATLAB操作
- 在C++中,如何将相同的操作应用于一组自变量
- C++中是否有类似于 Java 的 CompareTo 方法,您可以在其中对数据类型使用 > < = 操作
- 解密不适用于保存的图像,但适用于图像的像素操作矩阵
- c++ 指针操作等效于 ReadProcessMemory
- OSX:ld:警告:错误符号操作:适用于核心库
- 犰狳inplace_plus明显慢于"normal"加操作
- 使用什么样的API,您可以在OSX中执行read-consistent文件操作,类似于Windows卷影服务
- 使用模板化的变量类型执行特定于上下文的操作
- Boost:如何处理依赖于时间的线程操作
- C++中特定于线程的区域设置操作
- 操作类似于 Python 对 C/C++ 的"if x in y"?
- 比较两个字符串(类似于GNUdiff的操作)