【发布时间】:2012-03-06 09:34:57
【问题描述】:
我正在尝试在模板函数中添加一个可选参数...基本上是一个根据用户类型重载关系运算符的参数。这是我的第一个模板函数,所以我很基础。这应该对用户类型的向量进行排序并返回最大的元素。比如:
template <typename Type>
Type FindMax(std::vector<Type> vec, RelationalOverloadHere)
/..../
第二个“可选”参数是什么样的?
【问题讨论】:
我正在尝试在模板函数中添加一个可选参数...基本上是一个根据用户类型重载关系运算符的参数。这是我的第一个模板函数,所以我很基础。这应该对用户类型的向量进行排序并返回最大的元素。比如:
template <typename Type>
Type FindMax(std::vector<Type> vec, RelationalOverloadHere)
/..../
第二个“可选”参数是什么样的?
【问题讨论】:
通常是这样的
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);
【讨论】:
max_element那样重载函数。
你到底在问什么不是很清楚..但是..
这是一个可选参数,如果用户不提供任何内容,则为其指定默认值:
template <typename Type>
Type FindMax(const std::vector<Type> & vec, int foo = 1 /* <- This is a default that can be overridden. */)
// ...
【讨论】:
这是一个工作程序,显示了我认为您正在寻找的示例:
#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;
}
【讨论】: