如何调用以不同类模板作为参数列表的函数模板

how to call a function template that takes different class templates as parameters list

本文关键字:参数 列表 函数模板 同类 何调用 调用      更新时间:2023-10-16

我需要制作一个模板函数,它需要两个不同大小的std::array,但我不知道如何从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;
}

您要做的是传入两个大小不同的array,并返回一个大小为两个大小之和的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);