Я по сути хочу
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 ответ
Вам необходимо сделать 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
.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.