2014-10-05 44 views
0

我需要做一個模板函數,採用2個std::array s的大小不同,但我不知道如何把它從main函數調用:如何調用一個函數模板採用不同類模板作爲參數列表

// write a function to combine two sorted arrays and keep the resulting array sorted 

#include<iostream> 
#include<array> 
using namespace std; 

template <class T, size_t size> 
template <class T, size_t size_1> 
template <class T, size_t size_2> 
array<T, size> combine(array<T, size_1> a, array<T, size_2> b) 
{ 
    int i, j, k; 
    i = j = k = 0; 
    array<T, size> c; 
    while (i < size_1 && k < size_2) { 
     if (a[i] < b[k]) { 
      c[j] = a[i]; 
      j++; 
      i++; 
     } else { 
      c[j] = b[k]; 
      j++; 
      k++; 
     } 
    } 
    if (i < size_1) { 
     for (int q = j; q < size_1; q++) 
      c[j] = a[q]; 
    } else { 
     for (int e = k; e < size_2; q++) 
      c[j] = b[e]; 
    } 
    return c; 
} 

int main() 
{ 
    std::array<int, 5> a = { 2, 5, 15, 18, 40 }; 
    std::array<int, 6> b = { 1, 4, 8, 10, 12, 20 }; 
    std::array<int, 11> c; 
    c = combine<int>(a, b); 
    for (int i = 0; i < c.size(); i++) { 
     cout << c[i]; 
    } 

    return 0; 
} 
+0

模板規格不能測序這樣:'模板<類T,爲size_t大小> 模板<類T,爲size_t SIZE_1> 模板<類T,爲size_t SIZE_2>' – 2014-10-05 00:42:27

回答

3

你要做的是傳遞兩個不同尺寸的array s,並返回一個尺寸爲兩個尺寸之和的array

你可以聲明你的函數是這樣的:

template <typename T, std::size_t X, std::size_t Y> 
std::array<T, X+Y> combine (std::array<T, X> a, std::array<T, Y> b) 
{ 
    //... 
} 

這種方式,模板函數參數推導將工作。所以,你可以避免使用顯式模板參數來調用函數。

std::array<int, 5> a = { 2, 5, 15, 18, 40 }; 
    std::array<int, 6> b = { 1, 4, 8, 10, 12, 20 }; 
    auto c = combine(a, b); 
相關問題