让我们假设我有一个打印一组数字的函数:1, 2, 3, 4, 5这些数字既可以存储为数组,也可以存储为向量.因此,在我当前的系统中,我有两个函数接受这些参数中的任何一个.
void printNumbers(std::vector<double> &printNumbers)
{
//code
//....
}
Run Code Online (Sandbox Code Playgroud)
因此一个接受数组..
void printNumbers(int* numbers)
{
//code
//...
}
Run Code Online (Sandbox Code Playgroud)
这似乎浪费了代码,并且,我认为我可以更好地利用代码重用,这让我想到了这个:我可以使用模板来确定传递给函数的输入类型吗?例如,它是一个vector还是一个array整数值?
以下是原型:
#include <iostream>
using namespace std;
template<class T>
void printNumbers(T numbers)
{
// code
// code
}
int main(int argc, char *argv[]) {
int numbers[] = {1, 2, 3, 4, 5};
printNumbers<array> (numbers);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
通常的习惯用法是传递迭代器,一个用于范围的第一个元素,另一个用于"一个超过结束":
template<class Iterator>
void printNumbers(Iterator begin, Iterator end)
{
for (Iterator i = begin; i != end; ++i)
std::cout << *i << " ";
std::cout << "\n";
}
int main()
{
int numbers[] = {1, 2, 3, 4, 5};
printNumbers(numbers, numbers + 5);
printNumbers(std::begin(numbers), std::end(numbers); // C++11 version
std::vector<int> v{1,2,3,4,5};
printNumbers(v.begin(), v.end());
}
Run Code Online (Sandbox Code Playgroud)