Форум программистов, компьютерный форум CyberForum.ru

Двумерный массив std::array. Размеры массива шаблоном - C++

Восстановить пароль Регистрация
 
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
14.05.2016, 17:59     Двумерный массив std::array. Размеры массива шаблоном #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <array>
#include <iostream>
 
using std::array;
using std::cout;
 
template <typename T, size_t N, size_t M>
void foo(T& arr, ...) {
    array<T, N> temp;
}
 
 
int main() {
    array<array<int, 9>, 10> arr;
    foo(arr, 9, 10);
}
Кликните здесь для просмотра всего текста

Ошибка C2783 void foo(T &,...): не удается составить аргумент шаблон для "N" 15
Ошибка C2783 void foo(T &,...): не удается составить аргумент шаблон для "M" 15
Серьезность Код Описание Строка
Ошибка (активно) отсутствуют экземпляры шаблон функции "foo", соответствующие списку аргументов 15



По аналогии со старым вариантом работы с массивом хотелось. Как это сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
14.05.2016, 18:38     Двумерный массив std::array. Размеры массива шаблоном #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нужно явно указывать N и M
C++
1
foo< array<array<int, 9>, 10>,9,10>(arr, 9, 10);
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
14.05.2016, 19:40  [ТС]     Двумерный массив std::array. Размеры массива шаблоном #3
C++
1
2
3
4
5
6
7
template <typename T, size_t N, size_t M>
void foo(T& arr) {
    array<T, N> temp;
    int count = 0;
 
    for (int i = 0; i<N; i++) temp[i] = count++;  //Здесь как?
}
Как с таким массивом внутри работать?
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
15.05.2016, 04:32     Двумерный массив std::array. Размеры массива шаблоном #4
Цитата Сообщение от daslex Посмотреть сообщение
Здесь как?
Что значит "как"? Если параметр шаблона Т равен int или любому типу, который можно неявно сконструировать из переменной int count — все будет работать.
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2908 / 1444 / 397
Регистрация: 18.10.2014
Сообщений: 2,662
15.05.2016, 06:25     Двумерный массив std::array. Размеры массива шаблоном #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от daslex Посмотреть сообщение
Как это сделать?
Сначала надо было бы объяснить, что именно вы пытаетесь сделать. В частности, я не совсем понимаю, эти манипуляции с типом T. Вы передаете в функцию array<array<int, 9>, 10> arr, т.е. T - это двумерный массив array<array<int, 9>, 10>. Потом внутри вы объявляете array<T, N> temp, то есть это уже массив двумерных массивов - трехмерный массив. Так и задумано? Вам нужен трехмерный массив?

Если так и задумано, то почему массивы передаются, как некое абстрактное T? Почему бы не передавать как

C++
1
2
3
4
template <typename T, size_t N, size_t M>
void foo(std::array<std::array<T, N>, M> &arr) {
  ...
}
и тогда не надо будет вручную выписывать размеры при вызове.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
15.05.2016, 08:46  [ТС]     Двумерный массив std::array. Размеры массива шаблоном #6
Я понял, что получилось.

Но нет, изначально хотел двумерный массив.
Да, понял как.

C++
1
for (int i = 0; i<N; i++) temp[i][0] = count++;
Yandex
Объявления
15.05.2016, 08:46     Двумерный массив std::array. Размеры массива шаблоном
Ответ Создать тему
Опции темы

Текущее время: 00:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru