支持谓词的c++模板函数
c++ template function with predicate support
我想使用模板实现一个优先级队列。我尝试过,但我得到一些错误,我想通过自定义谓词支持更少的功能。
#include <iostream>
using namespace std;
template <typename T, std::size_t N, typename lessFunction>
class MyClass
{
typedef std::size_t size_type;
public:
void push( const T& t) {
//
size_type index ;//(some value .. say 5)
//...//
if(lessFunction(m_buffer[index], t))
{
/// do something
}
}
private:
T m_buffer[N];
};
struct myCompare
{
bool operator() (int& x, const int& y) {
return abs(x) < abs(y);
}
};
int main()
{
MyClass<int , 8, myCompare> obj;
obj.push(1);
return 0;
}
我得到这个错误。
/home/sanju/code/circular-buffer/main.cpp:17: error: no matching function for call to 'myCompare::myCompare(int&, const int&)'
if(lessFunction(m_buffer[index], t))
请纠正我。我还有一个问题
您需要创建类的实例,然后在push成员函数中使用重载()操作符。
...
lessFunction f ;
if (f(m_buffer[index], t))
...
操作符重载函数不是静态成员函数,因此需要声明类的实例才能调用。
必须在对象上调用lessFunction::operator(int&, const int&)
,因为操作符重载函数可能不是静态的。因此,您可以创建一个像
class MyClass
{
lessFunction comparator;
};
,当需要时,可以这样调用:
if ( comparator(m_buffer[index], t) )
你也可以将它声明为一个局部变量,但最好在整个类中只保留一个可访问的实例。
最后,您可以考虑使用std::less
作为默认模板参数,这样您就不必像使用myCompare
那样重新实现它。
template <typename T, std::size_t N, typename lessFunction = std::less<T>>
class MyClass
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗