gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:15:14 33 4
gpt4 key购买 nike

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

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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com