模板功能中的可选参数

时间:2012-03-06 01:20:29

标签: c++ templates

我正在尝试在模板函数中添加一个可选参数...基本上是一个参数,它根据用户的类型重载关系运算符。这是我的第一个模板功能,所以我很基本。这应该通过用户类型的向量进行排序并返回最大元素。类似的东西:

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

第二个“可选”参数会是什么样的?

3 个答案:

答案 0 :(得分:4)

通常这就像

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 :(得分:1)

目前尚不清楚你究竟在问什么......但是......

这是一个可选参数,如果用户没有提供任何内容,则指定默认值:

template <typename Type>
Type FindMax(const std::vector<Type> & vec, int foo = 1 /* <- This is a default that can be overridden. */)
// ...

答案 2 :(得分:1)

这是一个工作程序,显示了我认为您正在寻找的一个例子:

#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;
}