【问题标题】:wrong number of template arguments模板参数数量错误
【发布时间】:2017-04-11 02:08:12
【问题描述】:

我想写模板合并排序。

    template <class RandomAccessIterator, class Comparator = std::less<>>
void MergeSort(RandomAccessIterator begin, RandomAccessIterator end, Comparator compare) {
    int s = end - begin;
    if (s > 1)
    {
        RandomAccessIterator middle = begin + s / 2 + 1;
        MergeSort(begin, middle, compare);
        MergeSort(middle, end, compare);
        std::inplace_merge(begin, middle, end, compare);
    }
}

我得到的信息是:error: wrong number of template arguments (0, should be 1) 模板 >.

我尝试将 std::less 移至函数声明,但也失败了。我需要做什么?

【问题讨论】:

  • std::less&lt;T&gt; 需要T 的类型,不能为空。也许你可以使用std::less&lt;std::iterator_traits&lt;RandomAccessIterator&gt;::value_type&gt; 之类的东西。
  • @HenriMenke 从 C++14 开始就可以了。他们被称为钻石算子。

标签: c++ c++11 mergesort


【解决方案1】:

由于您将问题标记为C++11,因此您似乎无法使用菱形运算符。

正如您在documentation 中看到的那样,std::less&lt;&gt; 的形式仅在C++14 之后才允许使用。

你可以在这里做的是使用另一种形式:

std::less<typename std::iterator_traits<RandomAccessIterator>::value_type>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2019-02-25
    • 2017-07-21
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多