如何基于模板连接2个数组

How to concatenate 2 Arrays based on templates?

本文关键字:2个 数组 连接 何基于      更新时间:2023-10-16

我正在努力熟悉C++模板。我需要编写一个连接2个数组的函数模板:

template<typename T, int Size>
class Array
{
public:
    void push(int i, const T& t) { _elem[i] = t; }
private:
    T _elem[Size];
};

例如,我有两个阵列:

Array<int,3> a1;
Array<int,4> a2;

我不知道如何写这个函数,它会返回

Array<int,7>. 

这个函数的头应该是什么样子?

您应该这样尝试:

template<typename T, int A, int B>
Array<T, A+B> concatenate(Array<T, A> first, Array<T, B> second) 
{
    Array<T, A+B> result;
    for (int idx = 0; idx < A; ++idx) {
        result.push(idx, first[idx]);
    }
    for (int idx = 0; idx < B; ++idx) {
        result.push(idx+A, second[idx]);
    }
    return result;
}

您可以这样做,作为类外的免费函数:

template <typename T, int SizeA, int SizeB>
Array<T, SizeA + SizeB> join(const Array<T, SizeA>& first,
                                const Array<T, SizeB>& second)
{
    /* ... */
}

就其价值而言,您可能应该使用<cstddef>中的std::size_t,而不是int