我正在尝试使用std::less
,std::greater
或模板参数驱动的模板类。这是对this question的跟进,因为答案并没有提供完整的示例,我无法成功使用模板比较器。
#include <functional>
#include <algorithm>
template <typename C>
class Test
{
int compare(int l, int n, int x, int y)
{
public:
bool z = C(x, y);
if(l < n && z)
{
return 1;
}
else
{
return 2;
}
}
};
int main() {
Test<std::less<int>> foo;
Test<std::greater<int>> bar;
foo.compare(1, 2, 3, 4);
bar.compare(1, 2, 3, 4);
}
答案 0 :(得分:1)
请注意,C
(即std::less<int>
或std::greater<int>
)是类型名称,而不是实例。 bool z = C(x, y);
时C==std::less<int>
将无效,因为C(x, y)
将被解释为std::less<int>
的构造,由于std::less
没有这样的构造函数,因此会失败,std::less
无法转换为bool
。
您可能需要在operator()
的实例上致电C
,您可以将其更改为
bool z = C()(x, y);