@ProCxx

Страница 1293 из 2477
Alexander
11.09.2017
09:44:40
nuke_bird
11.09.2017
09:45:39
не так и сложно на самом деле. Просто чуть-чуть времени этому уделять, и жизнь становится проще. И переписывать ради переписывания не стоит.
+++ Ну, правда, всякие там for(Type a : blah) не напишешь. Да и смысл auto был немного в другом можно заменить разве что на какой-то макрос, ну или заюзать компиляторозависимую штуку

а, и лямбд нету. Они бывают довольно удобны, но и без них жить можно

Alexander
11.09.2017
09:46:22
Google
nuke_bird
11.09.2017
09:46:36
ага

А зачем нужна рефлексия и почему все с ней так носятся?
Можно получить информацию о методах и полях (название, количество аргументов, возвращаемый тип и т.п.), а так же информацию о базовых классах Как минимум можно реализовать сериализацию ЛЮБОГО класса ровно одной строкой. Да и прикреплять всякие СЯП куда проще

Дед Пегас
11.09.2017
09:49:35
nuke_bird
11.09.2017
09:49:36
отголоски этого есть, аля typeid - но все же это все не то

Потому что это уберполезно.
Угу. Все надеялись что в С++17 добавят, но в комитете все разругались (было несколько вариантов реализации статической рефлексии, не смогли выбрать самый удачный)

Aidar
11.09.2017
09:51:01
сериализаторы классно писать
Только для этого кажись

nuke_bird
11.09.2017
09:51:31
Только для этого кажись
Только это не ограничивается "записать экземпляры в файлик"

Вот другой пример:

Alexander
11.09.2017
09:51:52
Только для этого кажись
написание компараторов

Arseny
11.09.2017
09:52:10
Именно статическую рефлексию хотят сделать?

Aidar
11.09.2017
09:52:24
nuke_bird
11.09.2017
09:52:24
редактор карт. Ты можешь увидеть свойства у объектов и их менять так, как душе удобно. И для этого тебе не надо руками регистрировать переменные

Google
Alexander
11.09.2017
09:52:47
Не вижу профита
добавил поле, а в компаратоор забыл добавить его

nuke_bird
11.09.2017
09:53:08
Именно статическую рефлексию хотят сделать?
Хотели добавить в С++17, а как сейчас - не знаю. Ждем С++20

Aidar
11.09.2017
09:53:31
добавил поле, а в компаратоор забыл добавить его
Добавил поле но забыл что оно учитывается в компораторе

Александр
11.09.2017
09:54:19
для этого нужно делать кастомные атрибуты, которые определяли бы, нужно ли сериализовать поле

nuke_bird
11.09.2017
09:54:34
Добавил поле но забыл что оно учитывается в компораторе
Александр намекает на то, что с рефлексией такой проблемы банально не будет. Ты сможешь одной командой получить список полей и обработать их корректно. Добавилось новое поле - не страшно, код менять не надо

Александр
11.09.2017
09:55:18
Да го сразу новые модификаторы чо уж там
фактически, атрибуты + рефлексия - замена модификаторам

Aidar
11.09.2017
09:55:44
Зачем тогда си++

nuke_bird
11.09.2017
09:56:33
Зачем тогда си++
Работа с памятью

Alexander
11.09.2017
10:00:45
Зачем тогда си++
Не платишь за то, что не используешь?

я лично против шарпа ничего против не имею как языка. Приятно на нём писать

Arseny
11.09.2017
10:01:37
Если статически, то действительно круто выходит. Динамически - уже какая-то джава. В rust есть derive, у него в чём-то схожая функциональность. Можно автоматически генерировать классу функции.

nuke_bird
11.09.2017
10:01:44
#holywar ?

Aidar
11.09.2017
10:02:08
Кстати есть где-то перечисление всех вариантов рефлексии которые рассматривали?

Потомучто имена там на самом деле данные

nuke_bird
11.09.2017
10:03:00
@arseny ну сначала в любом случае статика будет. Если динамику добавят - то они её как-то хитро обыграют (например, компилятор будет автоматически пытаться использовать статическую рефлексию, если это возможно)

но так-то да, статики более чем достаточно

Google
nuke_bird
11.09.2017
10:04:10
Я хочу явно видеть компильтайм всегда
А что делать, если ты работаешь с dll, причем либа часто перекомпилируется, меняются методы и поля (и тебе надо за изменениями следить)?

т.е. интерфейс остается тем же

nuke_bird
11.09.2017
10:04:32
а вот реализация...

Aidar
11.09.2017
10:04:42
т.е. интерфейс остается тем же
Ну ты через него же работаешь

Тебе больше ничего не нужно

Или ты думаешь тебе позволят доставать то что не объявлено?

Выглядит как дрисьня

nuke_bird
11.09.2017
10:05:52
а как ты через интерфейс получишь список полей, м? В нем-то всего лишь чисто виртуальные методы

Aidar
11.09.2017
10:06:20
Или ты думаешь тебе позволят доставать то что не объявлено?

Выглядит как дрисьня

nuke_bird
11.09.2017
10:06:33
не хочу лезть в субъективщину

Aidar
11.09.2017
10:06:36
позволят, ещё как
Нельзя так делать

Это нарушение инкапсуляции кажется

nuke_bird
11.09.2017
10:06:54
Ну вот смотри, друг

Aidar
11.09.2017
10:07:01
Не буду

Google
Aidar
11.09.2017
10:07:03
Это дичь

Все

nuke_bird
11.09.2017
10:07:18
Тогда к чему все это? Монолог?

Допустим мы разрабатываем игрушку. Есть интерфейс сущности IEntity. Все новые виды сущностей (монстры, окружение и т.п.) наследуются от IEntity и переопределяют виртуальные методы Вот мы дошли до редактора карт, в котором мы расставляем эти сущности (объекты). Как изменять свойства объекта, как их читать? Интерфейс - просто перечисление чисто виртуальных методов. Перекомпилировать редактор карт каждый раз? =))

Редактор карт знает лишь о каком-то IEntity, не более

Aidar
11.09.2017
10:11:21
Редактор карт знает лишь о каком-то IEntity, не более
Ну выбери чем будет IEntity. Кажется ты хочешь контейнер свойств. Только непонятно зачем тебе релексия если это явно контейнер

Динамическая рефлексия всегда сводится к контейнеру

Admin
ERROR: S client not available

Диджитал
11.09.2017
10:13:29
Динамическая рефлексия всегда сводится к контейнеру
почему это? хранить пары имя-смещение

Arseny
11.09.2017
10:13:30
Динамическая рефлексия должна будет приводить к ощутимому росту бинарника.

nuke_bird
11.09.2017
10:13:38
да, идем дальше Вот хранится внутри class Player: public IEntity экземпляр кастомного класса Health. Ты хотел бы чтобы в редакторе оно высветилось как подкатегория + можно было дергать свойства Health. Но класс объевлен только в рамках сборки данного объекта, редактор карт знать-не знает ни о Player, ни о Health

Динамическая рефлексия должна будет приводить к ощутимому росту бинарника.
Я в пример ставлю редактор карт. Как игрушка в конце собираться будет - дело двадцатое

Да, можно руками регистрировать каждое поле. Это будет работать. Но вы же заставляете это делать геймдевелоперов - они не должны об этом думать, они должны игру писать

nuke_bird
11.09.2017
10:16:54
а более аргументированно можно?

вот приведи свою реализацию, как бы сделал ты

Aidar
11.09.2017
10:17:31
а более аргументированно можно?
Чё аргументировать? У тебя концептуально не правильный подход

Это не должно выражаться кодом потомучто это данные

Все что ты перечислил

Google
nuke_bird
11.09.2017
10:18:37
То есть ты предлагаешь руками перечислять свойства через методы IEntity/IEngine? Или как?

Как сделать красиво?

Aidar
11.09.2017
10:19:59
То есть ты предлагаешь руками перечислять свойства через методы IEntity/IEngine? Или как?
Не надо ничего перечислять это должно быть подобие контейнера

nuke_bird
11.09.2017
10:20:25
псевдокод можешь показать? Мне просто скоро подобную задачу надо будет решать, вот и интересуюсь

Aidar
11.09.2017
10:20:58
Не могу

nuke_bird
11.09.2017
10:21:04
Ясно

Scarf
11.09.2017
10:24:10
Зачем редактору карт вообще знать что там в игре в бинарнике?

nuke_bird
11.09.2017
10:24:51
Свойства. Вот отмечаешь нужные переменные, которые редактор может менять, и в редакторе они появляются

Scarf
11.09.2017
10:25:23
Сериализация решает эту проблему.

nuke_bird
11.09.2017
10:25:25
речь же не о игре самой

Scarf
11.09.2017
10:25:56
Если я правильно понимаю.

Aidar
11.09.2017
10:25:57
Да просто я вижу что твои мысли вдохновлены редактором Джаваформ и винформ

nuke_bird
11.09.2017
10:26:13
нет конечно, лол

Посмотри вон даже на UE4

у них целая тулза для рефлексии забахана

только чтобы узнать какие свойства дергать

никаких намеков в интерфейсе тупо нет (и не должно быть)

Aidar
11.09.2017
10:27:20
И все что она делает это контейнер, только рядом, отвечаю

nuke_bird
11.09.2017
10:28:18
Контейнер? Какой контейнер? Там кодогенерация, в том числе часть действительно сериализуется

Контейнером я много чего обозвать могу

Страница 1293 из 2477