Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
1

Передать шаблон std::array в другой шаблон

08.03.2019, 11:13. Показов 2687. Ответов 5

Author24 — интернет-сервис помощи студентам
Шаблон std::vector передать получается:
C++
1
2
3
4
5
6
template <class T, template<class U, class = allocator<U> >class Seq > 
class A{
    Seq<T> vect;
};
 
A<int, vector> a;
А как передать шаблон std::array? На все мои попытки компилятор ругается
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2019, 11:13
Ответы с готовыми решениями:

Реализовать шаблон Array
Срочно нужна помощь! Реализовать шаблон Array, как класс-шаблон числового массива с задаваемыми...

Расстановка девяти чисел (Turbo C) Выводит ошибку using Matrix = std::array<std::array<int, 3>, 3>; и bool NextSet
#include &lt;iostream&gt; #include &lt;array&gt; using Matrix = std::array&lt;std::array&lt;int, 3&gt;, 3&gt;; //...

Std::thread шаблон класса
Как так получается что мы используем конструктор шаблонного класса std::thread без передачи...

Шаблон как тип контейнера std::set
template&lt;class T&gt; int func(T&amp;, int); typedef std::ostream_iterator&lt;int&gt; out_in; int main() { ...

5
18895 / 9853 / 2410
Регистрация: 30.01.2014
Сообщений: 17,296
08.03.2019, 13:15 2
HelloWorld56, вот прямо так напрямую - не получится. У шаблонов разный набор параметров, они не совместимы (у array - второй параметр - это его размер, а у вектора - аллокатор) и под заданный вами паттерн не подойдут.

Можно сделать через небольшой адаптер:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Вынесем обобщенную работу с контейнером в отдельный класс, чтобы не дублировать код
template <class Seq>
class ABase
{
    Seq container;
};
 
template <size_t N>
struct StaticSize {};
template <typename T, typename Size>
struct ArrayAdapter {};
 
// Основной шаблон
template <class T, template<class U, typename ...> class Seq, class Alloc = std::allocator<T> > 
class A : ABase< Seq<T, Alloc> > 
{ };
// Специализация для array
template <class T, size_t N> 
class A<T, ArrayAdapter, StaticSize<N>> : ABase< std::array<T, N> > 
{ };

Но прежде, чем это делать, надо подумать, а нужно ли это вообще: ведь работа с vector и array может довольно сильно различаться. И трудности их обобщения красноречиво говорят о том, что мы пытаемся скрестить ужа и ежа.
1
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
08.03.2019, 13:34 3
А зачем переделывать? Или может хотите специализировать для своего типа?
0
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
08.03.2019, 13:38  [ТС] 4
Цитата Сообщение от DrOffset Посмотреть сообщение
И трудности их обобщения красноречиво говорят о том, что мы пытаемся скрестить ужа и ежа.
Так мне и не нужно обобщать vector и array в одном шаблоне. Меня интересует как передать array в шаблон, который принимает только array, а не vector и array.
0
18895 / 9853 / 2410
Регистрация: 30.01.2014
Сообщений: 17,296
08.03.2019, 13:40 5
Лучший ответ Сообщение было отмечено HelloWorld56 как решение

Решение

Цитата Сообщение от HelloWorld56 Посмотреть сообщение
Так мне и не нужно обобщать vector и array в одном шаблоне.
Это другой разговор.
Вот:
C++
1
2
3
4
5
6
template <class T, size_t N, template<class U, size_t> class Seq > 
class A{
    Seq<T, N> arr;
};
 
A<int, 10, std::array> a;
0
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
08.03.2019, 14:01 6
HelloWorld56,
Если тип заранее известен, то думаю нет смысла использовать шаблоны для этого типа (т.е не передавать array в качестве шаблонного аргумента).
0
08.03.2019, 14:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2019, 14:01
Помогаю со студенческими работами здесь

Отсутствует список аргументов для шаблон класса std::vector
Есть функция: LoadFBX(std::vector* pOutVertexVector); на загрузку модели формата FBX в DX. На...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают)...

Шаблон стека изменить на шаблон очереди
Кто может пояснить как работает этот шаблон стека, так как мне нужно изменить его на очередь,а я не...

Подключение cpp файла дает ошибку "std::array: слишком мало аргументов шаблон"
Хочу создать приложение clr(чтобы были формы в приложении). Получаю примерно такой код: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru