【发布时间】:2011-11-14 18:25:07
【问题描述】:
我正在模板化一个队列类,因此我可以将它与任何东西一起使用,从整数到我需要定义的任何结构。
我需要将一个比较函数传递给类构造函数,一个用于 int 的预定义比较函数等,然后让客户端提供他们可能需要的任何比较函数。但是我该怎么做呢?
template<typename Type>
int cmpFn(Type one, Type two)
{
if (one < two) return -1;
if (one > two) return 1;
return 0;
}
template <typename Type>
class Queue
{
public:
Queue()
{
Type *list = new Type[size];
// What do I do now?
// How to define this constructor?
// It must pass a comparison function
// to a private sort method in this class.
}
private:
void sortFunc(Type list, int(fn)(Type one, Type two)=cmpFn);
};
上面的代码可能有一些错误,因为我只是从头顶写下来以使我的问题更清楚。但我感兴趣的只是在定义类时如何将比较函数传递给排序方法。
这是一项个人练习,我没有参加任何课程,也没有接触任何导师。我已经在谷歌上搜索了一段时间,但我无法找到正确的答案......我想我没有向 Google 先生提出正确的问题。
附: 客户端可能希望为任何类型的数据提供比较功能,例如:
struct individual
{
string name;
int age;
double height;
};
我猜构造函数应该是这样的:
Queue(int (*fn)(Type, Type) = cmpFn);
但是我该如何定义/实现呢?使用这个回调函数的不是Queue对象本身,而是它的方法:sort();
【问题讨论】:
-
这不是一个答案,但本着 C++ 的精神,我会以不同的方式设计它;即,期望
T带有operator<或std::less<T>的特化,并将其用于排序。甚至可能公开迭代器,尽管这对于类似队列的结构可能没有帮助。
标签: c++ templates function callback pass-by-reference