Не думаю, что понимаю разницу между 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
}