首页 > 解决方案 > 使用模板排序的默认谓词。C++

问题描述

我正在尝试定义类模板,如下所示

template <typename T> class test{
       std::list<T> container;
       public:
       template <typename type, typename PRED = std::greater<int>>
        void push(type e, PRED comp = std::greater<int>) {
            container.push_back(e);
            container.sort(comp);
        }

};

从 main 我希望能够告诉 sort 应该如何进行排序。但如果没有指定,我也想排序使用 std::greater 。上面的代码告诉我 std::greater 是非法的。

标签: c++

解决方案


你可能想要这样做:

template <typename type, typename PRED = std::greater<T>>
void push(type e, PRED comp = PRED()) {
    // ...
}

用作std::greater<T>默认模板参数,这样即使Tis not也能正常工作int

用作参数PRED()的默认值comp,这样即使用户指定了其他一些可默认构造的谓词类型(例如std::less<T>.


推荐阅读