![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем привет.
хочу заставить такой код работать:
http://liveworkspace.org/code/4513b0bb4013...e50f1ffb9eb09bf по компилятор говорит это:
методом тыка, перепробовал наверное все возможные и невозможные способы... %) Добавлено через 2 минуты и 10 секунд что-то мне подсказывает, что компилятору, в момент выведения типа и размера для возвращаемой ссылки на массив, T и N еще не известны. |
||||
|
|||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Попробуй определить строку перед вызовом
Вот и узнаешь наверняка. Мне кажеться что компилятор не настолько умный что может извлечь N из размера массива. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
rumit7 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
Так?
LWS |
||||||
|
|||||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ошибка та же.
ну как же?! компилятор сам подсчитывает размер массива, если этот массив является constant expression:
http://liveworkspace.org/code/b42354114625...9adcbc0079f00e3 Добавлено @ 09:06 эм.. результат тот что нужно. вот только я не могу осилить выражение: const T (&get_arr(const T(&arr)[N]))[N] ![]() Добавлено @ 09:08 о! еще один способ:
http://liveworkspace.org/code/f7172896f4f4...27ee57186063755 эту сигнатуру я хоть понимаю ![]() Это сообщение отредактировал(а) boostcoder - 13.1.2012, 09:09 |
||||||
|
|||||||
rumit7 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
![]() Можно попробовать вот эту статью Reading C type declarations, после нее как-то легче становится |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
подниму-ка я тему.
пытаюсь создать аргумент в этой функции, для того чтоб его вернуть и нее.
с этим кодом все ок. теперь пробую сделать как-то так:
http://liveworkspace.org/code/c1fb6b4da2a9...6e4606c891f323e но мне тут не понятны два момента: 1. каким должен быть возвращаемый тип? 2. как инициализировать dst значением по умолчанию? спасибо. зы да, compile-time сортировка ;) зызы обновил последний пример. Это сообщение отредактировал(а) boostcoder - 15.1.2012, 10:15 |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
любое.
из-за того что constexpr функция должна выражаться как "{ return expr; }", я не могу в функции что либо задекларить. по этому я и хочу в качестве временного массива использовать второй аргумент, который будет массивом тех же типов и того же размера, но не ссылкой. Это сообщение отредактировал(а) boostcoder - 15.1.2012, 11:51 |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
со ссылкой это будет как-то так:
http://liveworkspace.org/code/a3acfb609622...39cf0cb248eb0f0
в С/C++ вообще нельзя передать в функцию массив, и в данном случае вы передаете просто указатель. ну в конце концев, если низя никак на вход ссылку (почему?), то так: http://liveworkspace.org/code/4e603e37aedf...d9366d2d76bae6d |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну да... ссылка на массив - это другое... внутри sort(), я собираюсь модифицировать dst. т.е. результат сортировки поместить в него. и вернуть его. а, т.к. мне нужно его модифицировать, он не должен быть константным. а неконстантную ссылку нельзя инициализировать временным значением. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а второй аргумент не будет временным ?! которым вы будете инициализировать возвращаемую ссылку ?? Добавлено через 2 минуты и 29 секунд я, так понимаю, Вы хотите, имея некий литерал, автоматически получить память, и вернуть ее ссылкой - это противоречит логике.. прежде чем делать на массивах попробовали свою композицию на инте ![]() Добавлено через 3 минуты и 5 секунд P.S. естественно речь о const_expr функции.. Добавлено через 4 минуты и 24 секунды т.е. если хотите куда то отсортировать, вы должны завести для этого память.. вообщем начинать надо сформулировки задачи, а не с попытки найти лазейку... |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
будет. но он валиден пока я в функции. это мне и надо. а возвращая его из функции, я получу копию. (я так понимаю..) не. возвращать нужно копию массива. вот, пробовал. надоело хеши считать. хочу сортировку! ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как вы получите копию, если возвращаемоe является ссылкой ? может тогда std::array прикрутить ? |
|||
|
||||
rumit7 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
А что если так?
Правда все равно не понятно, как Вы будите сортировать?! |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
есть размер (N) значит можно организовать цикл (рекурсивный) , к значениям можно применить мин, и есть место куда сложить результат - значит и отсортировать можно ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |