gpt4 book ai didi

c++ - 将 C++ 比较器仿函数作为参数传递时出现问题

转载 作者:行者123 更新时间:2023-11-28 01:04:56 28 4
gpt4 key购买 nike

假设我有一个名为 LinkedList 的模板类,它还包含一个名为 Sort 的方法我希望能够有一个默认比较器,它假定类型 T 可以与 < 运算符进行比较。

但是,我希望能够为其他类型覆盖它。

这是我正在扩展的自定义库的一部分。没有 STL。

例如

template <class T, class Comparator<T> >
class LinkedList
{
...
Node* MergeSort(Node* list)
{
...
if (Comparator<T>(nodeA,nodeB))
...
}
...
};


typedef Pair<int, int> ListEntry;

struct sorter
{
inline sorter(){}
inline bool operator()(ListEntry const& a, ListEntry const& b)
{
return a.second < b.second;
}
};

Pair<int, int> entry;
LinkedList<ListEntry, sorter()> list;

list.PushFront( ListEntry(5,9) );
list.PushFront( ListEntry(77,5) );
list.PushFront( ListEntry(4,1) );
list.PushFront( ListEntry(8,44) );
list.PushFront( ListEntry(1,64) );
list.PushFront( ListEntry(3,5) );
n = list.MergeSort(node* n);

我的类(class)大概是这样的。实际上 MergeSort 是一个私有(private)数据成员,但我暂时将其公开,只是在我四处闲逛并尝试使其工作时。 MergeSort 最终会被 Sort 调用。

我没能编译这个。只是想知道您通常如何像这样传递 Functor 对象。

最佳答案

你不能说 template <class T, class Comparator<T>> ,即让一个模板参数本身成为另一个参数的参数。像标准库那样做并使用默认参数:

template <class T, class Comparator = std::less<T>>
class MyClass
{
...
}

此外,Comparator将成为您需要在某个时候实例化的对象。同样,默认参数是关键:

void MyClass::doSomething(Foo x, Comparator comp = Comparator())
{
/* ... */
if (comp(a, b)) { /* ... */ }
/* ... */
}

关于c++ - 将 C++ 比较器仿函数作为参数传递时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6784518/

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