HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > с++: опять запутался в трёх соснах.
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 28

Рейтинг



thambs

Цитата:
thambs писал:
Можно ли добиться поведения аналогичного передаче по ссылке?

Ну передавай указатели. Потому что
no arrays of references

Цитата:
а можно сделать количество однотипных аргументов параметром шаблона?

Не понял что ты хочешь сделать.

Сообщить модератору | IP: Записан
Сообщение: 157042

Старое сообщение 23-07-2016 05:41
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33028
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ComradeAndrew писал:
Потому что
no arrays of references

К слову сказать подобные ограничения свидетельствуют о непродуманности архитектуры языка в целом. Да и не только языка, а вооббще любого продукта. Интуитивно понятное обучение строится на аналогиях и человек привыкший делать массивы из указателей естественно будет пытаться провернуть подобное и со ссылками. А потом конечно выходят книжки "как делать нельзя". Вообще большинство книжек по крестам учит именно тому чего делать нельзя.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 157062

Старое сообщение 23-07-2016 13:42
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13504
Возраст: 33

Рейтинг



Дядя Миша
ИМХО как делать нельзя должен сообщать компилятор, а не книжки

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 157068

Старое сообщение 23-07-2016 14:39
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33028
Нанёс повреждений: 392 ед.

Рейтинг



FiEctro компилятор не подскажет тебе как лучше организовать структуру приложения. Если бы он умел это делать, надобность в программистах отпала бы сама-собой.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 157069

Старое сообщение 23-07-2016 14:53
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35014
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


FiEctro
Компилятор и сообщает, но все почему-то потом к нам на форум идут, с уточняющими вопросами.

__________________

Сообщить модератору | IP: Записан
Сообщение: 157072

Старое сообщение 23-07-2016 15:57
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33028
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
но все почему-то потом к нам на форум идут, с уточняющими вопросами.

а наша задача - отредиректить их на три весёлых буквы, на CSM тоесть.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 157077

Старое сообщение 23-07-2016 17:27
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35014
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
отредиректить их на три весёлых буквы, на CSM тоесть.

Как говорил Охлобыстин в известном сериале - на ЭКГ!

__________________

Сообщить модератору | IP: Записан
Сообщение: 157083

Старое сообщение 23-07-2016 18:13
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



>no arrays of references
Это понятно. Я другое имел ввиду. Сейчас у меня функция выглядит так:

C++ Source Code:
1
template<typename...Is>
2
inline T& operator () (Is...args){
3
  const int n_args = sizeof...(args);
4
  int xs[n_args] = {((int)args)...};
5
  int i = 0; for(int n=0; n<n_args; n++) i += xs[n] * helper[n];
6
  return data[i];
7
}

т.е. сначала аргументы копируются в args, потом из args повторно копируются в xs. Если я правильно понимаю как работает компилятор, то при передаче параметра по ссылке ничего никуда не копируется, а при обращении к соответствующему аргументу просто подставляется его адрес. Соответственно, хотелось бы, что бы шаблон разворачивался во что ни будь типа:
C++ Source Code:
T& operator () (int& arg1, int& arg2, int& arg3, int& arg4)

Можно конечно все случаи написать вручную, но наверняка же можно это высокоуровнево сделать.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | IP: Записан
Сообщение: 157137

Старое сообщение 24-07-2016 14:50
- За что?
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 28

Рейтинг



thambs
Так ты хочешь изменять аргументы, беря их по ссылке, или ты так пытаешься "оптимизировать" код?
Если второе, то забудь. Ассемблерный код почти не отличается, особенно когда ты потом кладешь все аргументы в массив под который выделяется память в любом случае. Да и не думай, что ты умнее компилятора и процессора в 2016 году, когда пишешь на плюсах.

Ну если сильно хочется, то можешь сделать так:

C++ Source Code:
template<typename...Ts>
void func (Ts&...args)

Сообщить модератору | IP: Записан
Сообщение: 157159

Старое сообщение 24-07-2016 20:00
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33028
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ComradeAndrew писал:
Да и не думай, что ты умнее компилятора и процессора в 2016 году

а компилятор што, не люди писали?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 157161

Старое сообщение 24-07-2016 20:08
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35014
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


Цитата:
ComradeAndrew писал:
Да и не думай, что ты умнее компилятора и процессора в 2016 году, когда пишешь на плюсах.

Забавно, но я слышу эту фразу вот уже 16 лет, в ней меняется только год.
А потом выясняется, что компилятор какой-нибудь 2010-й студии не умеет нормально max скомпилировать, и далее в этом же духе.
Компилятор - он не умный, он педантичный. В том смысле, что не может сделать ошибку по невнимательности, что характерно для человека. В остальном же - дуб дубом.

__________________

Сообщить модератору | IP: Записан
Сообщение: 157162

Старое сообщение 24-07-2016 20:15
-
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 28

Рейтинг



Цитата:
Дядя Миша писал:
а компилятор што, не люди писали?

Где я такое сказал?

XaeroX
Ну давайте тут вручную высокоуровневый код оптимизировать.
Ты правда считаешь, что на это стоит тратить время? Которое, кстати, можно потратить на оптимизацию самих алгоритмов и представления данных.

thambs
Кстати, раз уж пишешь на плюсах, то можешь использовать такую распаковку, когда надо для каждого аргумента одно и тоже сделать:
C++ Source Code:
1
#include <initializer_list>
2
 
3
template<typename...Is>
4
int sum (Is&...args) {
5
  int s = 0;
6
  auto add = [&s](int arg) { s+=arg; }; // Лямба-функция
7
  if (sizeof...(args))
8
    std::initializer_list<int>({ (add(args), 0)... });
9
  return s;
10
}

Сообщить модератору | IP: Записан
Сообщение: 157168

Старое сообщение 24-07-2016 20:45
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35014
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


ComradeAndrew
Я не говорю - всё бросить и оптимизировать. Я предлагаю избегать пессимизации, понадеявшись на мудрость компилятора. Некоторые этим грешат, увы.

__________________

Сообщить модератору | IP: Записан
Сообщение: 157169

Старое сообщение 24-07-2016 20:55
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33028
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ComradeAndrew писал:
Где я такое сказал?

Ты - нигде. Поэтому я тебя и спросил.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 157171

Старое сообщение 24-07-2016 21:18
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



А можешь пояснить (или лучше кинуть статьёй) как вот эта распаковка работает?

C++ Source Code:
std::initializer_list<int>({ (add(args), 0)... });
//Конкретно, не понятно, для чего 0 в (add(args), 0) и как вообще подскобочное выражение работает.

В курсе по которому язык учил, как то их обошли стороной, а самостоятельно до сих пор не понял как это работает.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | IP: Записан
Сообщение: 157173

Старое сообщение 24-07-2016 21:27
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 17:16. Новая тема    Ответить
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > с++: опять запутался в трёх соснах.
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024