Как объединить 2 массива на основе шаблонов? - PullRequest
2 голосов
/ 31 мая 2011

Я пытаюсь ознакомиться с шаблонами C ++. Мне нужно написать шаблон функции, которая объединяет 2 массива:

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

Например, у меня есть 2 массива:

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

Я не знаю, как написать эту функцию, которая будет возвращать

Array<int,7>. 

Как должен выглядеть заголовок этой функции?

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Вы должны попробовать это так:

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;
}
1 голос
/ 31 мая 2011

Вы можете сделать это так, как свободную функцию вне класса:

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

Что бы это ни стоило, вам, вероятно, следует использовать std::size_t из <cstddef> вместо int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...