необязательный параметр в шаблонной функции - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь добавить необязательный параметр в шаблонную функцию ... В основном это параметр, который перегружает реляционный оператор в зависимости от типа пользователя.Это моя первая функция шаблона, поэтому я довольно простой.Это должно отсортировать вектор пользовательского типа и вернуть наибольший элемент.Что-то вроде:

template <typename Type>
Type FindMax(std::vector<Type> vec, RelationalOverloadHere)
/..../

Как будет выглядеть второй «необязательный» параметр?

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

Обычно это похоже на

template<typename Type, typename BinaryOperation = std::less<Type> >
Type FindMax(const std::vector<Type>& vec, BinaryOperation op = BinaryOperation());

Таким образом, стандартный компаратор <, но при желании его можно настроить.

В стандартной библиотеке соответствующий алгоритм - max_element со следующей перегрузкой:

template<typename ForwardIterator, typename Compare>
  ForwardIterator
  max_element(ForwardIterator first, ForwardIterator last, Compare comp);
1 голос
/ 06 марта 2012

Вот рабочая программа, показывающая пример того, что, я думаю, вы ищете:

#include <vector>
#include <iostream> 
#include <functional>
#include <algorithm>

template <typename Type, typename Compare = std::less<Type>>
Type findmax(std::vector<Type>& v, Compare comp = Compare())
{
    return *std::max_element(v.begin(), v.end(), comp);
}


int main()
{
    int a[] = {1, 11, 232, 2, 324, 21};
    std::vector<int> v(a, a+6);

    std::cout << findmax(v) << std::endl;
}
1 голос
/ 06 марта 2012

Не совсем понятно, о чем именно вы спрашиваете .. Но ..

Вот необязательный параметр, для которого указывается значение по умолчанию, если пользователь ничего не предоставляет:

template <typename Type>
Type FindMax(const std::vector<Type> & vec, int foo = 1 /* <- This is a default that can be overridden. */)
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...