【发布时间】:2020-02-06 01:00:58
【问题描述】:
我想我不明白下面 5 个模板化函数之间有什么区别,希望有人能解释一下。什么时候应该使用每一个?
前 2 个没有默认模板参数,但后 2 个有。第一个和第三个将comp 的默认参数设置为default_comparer<data_t>(),但第二个和第四个没有。最后一个似乎没用,因为从不使用默认值。
template<typename data_t>
struct default_comparer {
bool operator()(const data_t& d1, const data_t& d2) const
{
return d1 < d2;
}
};
第一个
template<typename data_t, typename comparer_t>
pair partition(std::vector<data_t>& list, size_t pivot_idx, size_t start, size_t end,
const comparer_t& comp = default_comparer<data_t>())
{
//do stuff
}
第二个
template<typename data_t, typename comparer_t>
pair partition(std::vector<data_t>& list, size_t pivot_idx, size_t start, size_t end,
const comparer_t& comp = comparer_t())
{
//do stuff
}
第三个
template<typename data_t, typename comparer_t = default_comparer<data_t>>
pair partition(std::vector<data_t>& list, size_t pivot_idx, size_t start, size_t end,
const comparer_t& comp = default_comparer<data_t>())
{
//do stuff
}
第四个
template<typename data_t, typename comparer_t = default_comparer<data_t>>
pair partition(std::vector<data_t>& list, size_t pivot_idx, size_t start, size_t end,
const comparer_t& comp = comparer_t())
{
//do stuff
}
第五个
template<typename data_t, typename comparer_t = default_comparer<data_t>>
pair partition(std::vector<data_t>& list, size_t pivot_idx, size_t start, size_t end,
const comparer_t& comp)
{
//do stuff
}
【问题讨论】:
标签: c++ function templates default