我正在尝试在模板函数中添加一个可选参数...基本上是一个参数,它根据用户的类型重载关系运算符。这是我的第一个模板功能,所以我很基本。这应该通过用户类型的向量进行排序并返回最大元素。类似的东西:
template <typename Type>
Type FindMax(std::vector<Type> vec, RelationalOverloadHere)
/..../
第二个“可选”参数会是什么样的?
答案 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;
}