1

为什么我会得到:

missing template arguments before ‘(’ token

使用时:

sort(index_mu.begin(), index_mu.end(), index_cmp(mu_pt_corrected));

在哪里和index_mustd::vector<int>mu_pt_correctedstd::vector<float>

template<class T> struct index_cmp {
    index_cmp(const T arr) : arr(arr) {}
    bool operator()(const size_t a, const size_t b) const
    { return arr[a] > arr[b]; }
    const T arr;
};

编译器不能识别 的类型T吗?为什么?

4

1 回答 1

4

模板参数推导仅适用于函数。通常,编译器没有必要的信息来推断类的参数。出于这个原因,在这种情况下添加一个函数是很常见的:

template <typename T>
index_cmp<T>
indexCmp( T const& arr )
{
    return index_cmp<T>( arr );
}

然后您可以致电:

sort( index_mu.begin(), index_mu.end(), indexCmp( mu_pt_corrected ) );

编译器会推断出函数的类型,然后再定义类型。

于 2013-08-05T09:27:23.333 回答