使用模板比较器的完整示例

时间:2016-07-25 02:03:35

标签: c++ templates c++14

我正在尝试使用std::lessstd::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);
}

1 个答案:

答案 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);