具有谓词支持的 C++ 模板函数

标签 c++ templates

我想使用模板实现一个优先级队列。我试过了,但我遇到了一些错误,我想传递自定义谓词支持以减少功能。

#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))

请指正。我还有一个问题 这个模板如何使用仿函数以及 lessFunction 的功能?

最佳答案

您需要创建该类的一个实例,然后在您的 push 成员函数中使用重载的 () 运算符。

...
lessFunction f ;
if (f(m_buffer[index], t))
...

运算符重载函数不是静态成员函数,因此需要声明类的实例才能调用。

关于具有谓词支持的 C++ 模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760982/

相关文章:

c++ - 我收到有关枚举的错误(我认为)

python - 我在哪里可以下载示例 Django 模板?

c++ - 如何在模板类中重载 less 运算符以供排序算法使用?

c++ - 封装私有(private)枚举

java - Eclipse 代码模板自动生成对字符串 setter 方法参数的 trim() 调用

c++ - 如何子类化由特征选择的父类(super class)?

templates - 在 Golang 服务器中呈现 MIME 类型的 Assets 时出错

c++ - 从命名空间基类虚拟继承,具有来自命名空间的私有(private)成员

c++ - 我对 boost::mpi::request 缺少什么?测试似乎改变了状态

c++ - 无法在 Linux 中使用自定义头文件编译 C++ 程序