我想在模板函數中添加一個可選參數...基本上是一個參數,它根據用戶的類型重載關係運算符。這是我的第一個模板功能,所以我很基本。這應該通過用戶類型的向量進行排序並返回最好的元素。例如:模板函數中的可選參數
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);
這不是爲你問到底是什麼非常清楚。但是..
下面是其默認值的可選參數的情況下,用戶指定不提供任何內容:
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;
}
+ 1,打我5秒 – 2012-03-06 01:30:15
我認爲模板參數* function template *的默認參數只允許在C++ 11中使用。但我可能是錯的。讓我知道如果我錯了。 – Nawaz 2012-03-06 01:43:18
@Nawaz我知道Visual Studio不允許它,但這並不意味着什麼...... – 2012-03-06 02:06:00