
Alexander
11.09.2017
09:44:40

nuke_bird
11.09.2017
09:45:39
а, и лямбд нету. Они бывают довольно удобны, но и без них жить можно

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

Aidar
11.09.2017
09:51:53

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

Aidar
11.09.2017
09:53:31

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

nuke_bird
11.09.2017
09:54:34

Aidar
11.09.2017
09:54:59

nuke_bird
11.09.2017
09:55:09

Александр
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
я лично против шарпа ничего против не имею как языка. Приятно на нём писать

Aidar
11.09.2017
10:01:15

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

Aidar
11.09.2017
10:03:34
И так от констекспр плевался

Arseny
11.09.2017
10:03:53

nuke_bird
11.09.2017
10:04:10
т.е. интерфейс остается тем же

Aidar
11.09.2017
10:04:31

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

Aidar
11.09.2017
10:04:42
Тебе больше ничего не нужно
Или ты думаешь тебе позволят доставать то что не объявлено?
Выглядит как дрисьня

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

nuke_bird
11.09.2017
10:06:19

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
Динамическая рефлексия всегда сводится к контейнеру

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

Aidar
11.09.2017
10:16:40

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

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
Контейнер? Какой контейнер?
Там кодогенерация, в том числе часть действительно сериализуется
Контейнером я много чего обозвать могу