Я по сути хочу

template <typename Container, typename T>
void copy(Container<T> &A, const Container<T> &B)
{
   (copy contents from B to A) ...
}

Но, черт возьми, этого нельзя сделать. При использовании он будет копировать содержимое из (например) vector<int> A, B, но также работает, например, для list<float> A, B.

Таким образом, одна функция будет работать для контейнеров разных типов и разных типов данных для соответствующих контейнеров.

1
EthanR 24 Сен 2020 в 23:53

1 ответ

Лучший ответ

Вам необходимо сделать Container параметром шаблона шаблона:

template <template<typename...> typename Container, typename T>
Container<T> copy(Container<T> A, Container<T> B)
{
   // (copy contents from B to A) ...
}

В качестве альтернативы вы можете просто написать:

template <typename Container>
Container copy(Container A, Container B)
{
   // (copy contents from B to A) ...
}

Если вам не нужно явно указывать тип элемента T. Вы все равно можете получить этот тип, выполнив Container::value_type.

3
cigien 24 Сен 2020 в 21:06