HLFX.Ru Forum Страницы (9): « Первая ... « 2 3 4 5 [6] 7 8 9 »
Показать все 123 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- нубовопросы по c++ (https://hlfx.ru/forum/showthread.php?threadid=5083)


Отправлено Дядя Миша 24-09-2019 в 06:08:

STL это вообще удивительная вещь. Её сделал наш, а гордость почему-то никто не испытывает. Подозрительно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 24-09-2019 в 07:07:

Дядя Миша
Ну потому что он не совсем наш. Вернее, совсем не наш. Наш - это сам знаешь что, на букву К.

__________________

xaerox on Vivino


Отправлено thambs 15-10-2019 в 14:06:

Вот ещё вопрос возник про vardic templates.
Например, если мне нужна функция переменной арности от однотипных аргументов, то я могу записать

C++ Source Code:
1
template<typename ...ids>
2
void foo (const ids&... args){
3
  for(auto& arg: {args...}){
4
    /* do stuff with arg*/
5
    }
6
  }


А можно ли эту конструкцию как-то специализировать для конкретного нетривиального типа под многоточием? Например, я хочу передавать в функцию, пускай, tuple<int,char*,float> — можно-ли написать это в единой конструкции, без привлечения прокси-шаблонов?

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


Отправлено Дядя Миша 15-10-2019 в 14:17:

О! Шаблоны позволяют var args? Хотя в шестёрке небось не сработает.

__________________
My Projects: download page

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

Цитата:

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


Отправлено thambs 30-11-2019 в 01:44:

А может кто ни будь пояснить, почему ptr не изменяется в результате?

C++ Source Code:
1
/* relink data <- ptr */
2
inline void relink
3
(void* ptr){
4
  self.data = (t*)ptr;
5
  ptr = self.data + self.offset[0];
6
  printf("relink %p -> %p\n", self.data, ptr);
7
}

Вызывается, например:
C++ Source Code:
void* ptr = nullptr;
cmp.pparts.relink(ptr);
cmp.pindex.relink(ptr);

А в результате:
C++ Source Code:
relink (nil) -> 0x445c0000
relink (nil) -> 0x2d00

При этом, если возвращать изменённый указатель из функции, то он снаружи нормально присваивается безо всяких проблем. В чём тут дело?

Добавлено 30-11-2019 в 04:44:

ps: или я идиот, или одно из двух...

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


Отправлено XaeroX 30-11-2019 в 01:51:

thambs
Потому что ты передаёшь указатель по значению, а не по указателю.
Функция должна иметь сигнатуру

C++ Source Code:
void relink(void **ptr)
со всеми вытекающими модификациями.

__________________

xaerox on Vivino


Отправлено thambs 30-11-2019 в 02:01:

XaeroX
Посыпаю голову пеплом, я точно идиот — слона не углядел.
Вот так, можно

C++ Source Code:
void*& ptr

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


Отправлено XaeroX 30-11-2019 в 02:44:

Цитата:
thambs писал:
Вот так, можно

Так, безусловно, тоже можно, но выглядит менее красиво, и сложнее для пони-мания.

__________________

xaerox on Vivino


Отправлено thambs 30-11-2019 в 03:00:

XaeroX
По-моему лучше, так rvalue туда не пропихнёшь.

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


Отправлено Дядя Миша 30-11-2019 в 06:53:

Цитата:
thambs писал:
А может кто ни будь пояснить, почему ptr не изменяется в результате?

ну почему жы, он меняется в результате. Но этот результат доступен только внутри самой функции, ты же скопировал указатель в аргумент. Вот он в аргументе и поменялся. А чтобы поменялся снаружи тебе нужен указатель на указатель или ссылка на указатель.

Цитата:
XaeroX писал:
Так, безусловно, тоже можно, но выглядит менее красиво

меня удалбывает внутри функции постоянно писать *ptr, некрасиво.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 30-11-2019 в 07:36:

Цитата:
Дядя Миша писал:
меня удалбывает внутри функции постоянно писать *ptr, некрасиво.

А не надо постоянно, достаточно написать это один раз.
Мне вообще эта функция не нравится. Какая-то она неправильная, ненормально это - модифицировать тут же и какой-то self, и входные данные, которые внезапно становятся выходными.

__________________

xaerox on Vivino


Отправлено thambs 03-02-2020 в 13:24:

Жесть какая-то, как заранее подмечать такие моменты?

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


Отправлено XaeroX 03-02-2020 в 15:56:

thambs
Прочитал только заголовок, т.к. статья слишком страшно выглядит.
Если это то, о чём я подумал, то в Волатиле это лечится "-fno-strict-aliasing" во всех модулях.

__________________

xaerox on Vivino


Отправлено Дядя Миша 03-02-2020 в 16:47:

thambs эти статьи всегда берут какой-то сферический пример.
Пусть на реальном покажут. Я не знаю как этот эффект правильно называется, но он присущ любому семейству компиляторов, что на искуственно выдуманной конструкции может случится фейл, тогда как на реальных сложнешийх примерах всё в порядке. Более того - баг только на этих примерах и проявляется. Вот я компилятор bsp тестировал на таких вот примерах. Ну и что? вылетел на комнатке из пяти брашей. А сипульчер прекрасно собирается. Эти статьи - они в первую очередь нужны тем, кто компиляторы пишет, ну в качестве багрепортов. Нахрена это пользователю.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 12-02-2020 в 12:53:

Кто-нибудь здесь пробовал использовать фреймворк GTK в разработке? Какие есть плюсы/минусы/специфические нюансы?

__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord


Временная зона GMT. Текущее время 03:11. Страницы (9): « Первая ... « 2 3 4 5 [6] 7 8 9 »
Показать все 123 сообщений этой темы на одной странице

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