Re[5]: Есть ли метод у класса - HasMethod - старая тема
От: rg45 СССР  
Дата: 11.11.19 09:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я выше уже писал, что возможность-то есть, но реализована она может быть лишь крайне извращенными (по отношению к основной парадигме языка). Да, окончательный синтаксис с макросом выглядит более-менее пристойно, но внутри него — откровенный ужас, разумного оправдания которому не существует. Это все от безысходности, которая активно поддерживается верхушкой разработчиков стандарта.


А как понять, где ужас, где не ужас, где извращение, где не извращение? Это ж всего лишь твои эмоции и субъективные оценки. У меня они тоже есть, но существенно отличаются от твоих.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[5]: Есть ли метод у класса - HasMethod - старая тема
От: night beast СССР  
Дата: 11.11.19 10:02
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

R>>Здесь
Автор: rg45
Дата: 10.11.19
черновой набросок, далекий от совершенства, но дающий некоторое представление о возможных подходах.


ЕМ>Я выше уже писал, что возможность-то есть, но реализована она может быть лишь крайне извращенными (по отношению к основной парадигме языка). Да, окончательный синтаксис с макросом выглядит более-менее пристойно, но внутри него — откровенный ужас, разумного оправдания которому не существует. Это все от безысходности, которая активно поддерживается верхушкой разработчиков стандарта.


это из-за отсутствия рефлексии, работы по добавлению которою в стандарт ведутся верхушкой разработчиков стандарта.
Re[6]: Есть ли метод у класса - HasMethod - старая тема
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.19 10:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>А как понять, где ужас, где не ужас, где извращение, где не извращение?


Да хотя бы по тому, что возможность применения шаблонов для анализа типов и их взаимоотношений в C++ была не заложена, а открыта (на это уже много раз указывали). То есть, задача у шаблонов была совершенно другой, и она вполне себе укладывается в парадигму языка. А когда обнаружили эти дополнительные возможности, пусть и реализуемые через явную задницу, и энтузиасты вроде Александреску, получающие главный кайф не от логичности и продуманности набора средств, а от озарений типа "ого, а ведь можно еще и так!", наработали вариантов их применения, было постановлено: "если это можно сделать на шаблонах — значит, надо делать на них, и нечего усложнять ядро".

Там, где достаточно простые задачи требуют совершенно излишней эквилибристики, да еще и чуждой самой сути задачи, везде ужас и извращение.
Re[6]: Есть ли метод у класса - HasMethod - старая тема
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.19 10:26
Оценка:
Здравствуйте, night beast, Вы писали:

NB>это из-за отсутствия рефлексии


Рефлексия — это уже следующая ступень. Она не является необходимой для получения на этапе компиляции всей информации о типах, которой уже располагает компилятор.
Re[7]: Есть ли метод у класса - HasMethod - старая тема
От: rg45 СССР  
Дата: 11.11.19 12:47
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я выше уже писал, что возможность-то есть, но реализована она может быть лишь крайне извращенными (по отношению к основной парадигме языка). Да, окончательный синтаксис с макросом выглядит более-менее пристойно, но внутри него — откровенный ужас, разумного оправдания которому не существует. Это все от безысходности, которая активно поддерживается верхушкой разработчиков стандарта.


R>>А как понять, где ужас, где не ужас, где извращение, где не извращение?


ЕМ>Да хотя бы по тому, что возможность применения шаблонов для анализа типов и их взаимоотношений в C++ была не заложена, а открыта (на это уже много раз указывали).


Гм, тогда почему "окончательный синтаксис с макросом" — это не ужас? Это ведь такое же применение шаблонов для анализа типов, да еще и с макросами. Что-то ты сам себе противоречишь.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[8]: Есть ли метод у класса - HasMethod - старая тема
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.19 13:00
Оценка:
Здравствуйте, rg45, Вы писали:

R>Гм, тогда почему "окончательный синтаксис с макросом" — это не ужас?


Я имел в виду исключительно конструкцию, где макрос применяется, а не само его определение (которое, разумеется, есть ужас). Она, конечно, тоже выглядит очень коряво, но для ее понимания хотя бы не требуется вдумчиво вникать в тонкости обработки шаблонов компилятором (которые, повторю, начали применяться по чистой случайности).
Re[9]: Есть ли метод у класса - HasMethod - старая тема
От: rg45 СССР  
Дата: 11.11.19 13:18
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я выше уже писал, что возможность-то есть, но реализована она может быть лишь крайне извращенными (по отношению к основной парадигме языка). Да, окончательный синтаксис с макросом выглядит более-менее пристойно, но внутри него — откровенный ужас, разумного оправдания которому не существует. Это все от безысходности, которая активно поддерживается верхушкой разработчиков стандарта.


R>А как понять, где ужас, где не ужас, где извращение, где не извращение?


ЕМ>Да хотя бы по тому, что возможность применения шаблонов для анализа типов и их взаимоотношений в C++ была не заложена, а открыта (на это уже много раз указывали).


R>Гм, тогда почему "окончательный синтаксис с макросом" — это не ужас?


ЕМ>Я имел в виду исключительно конструкцию, где макрос применяется, а не само его определение (которое, разумеется, есть ужас).


Я тоже имел в виду исключительно конструкцию, где макрос применяется. Применение этого макроса — это такое же использование шаблонов для анализа типов. Однако в одном месте это ужас, по-твоему, а в другом, не ужас, почему-то
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 11.11.2019 13:51 rg45 . Предыдущая версия . Еще …
Отредактировано 11.11.2019 13:19 rg45 . Предыдущая версия .
Re[10]: Есть ли метод у класса - HasMethod - старая тема
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.19 14:11
Оценка:
Здравствуйте, rg45, Вы писали:

R>Применение этого макроса — это такое же использование шаблонов для анализа типов.


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

Можно было бы даже сказать, что для успешного использования подобных конструкций, импортированных из библиотек, вовсе не обязательно вникать в их реализации. Но мы же знаем, что это не так — при некоторых ошибках компилятор вывалит кашу из сообщений, разобраться в которой бывает непросто даже автору, не говоря уже о пользователе. И это тоже ужас.
Re[4]: Есть ли метод у класса - HasMethod - старая тема
От: Molchalnik  
Дата: 11.11.19 22:19
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, Molchalnik, Вы писали:


M>>Буст тяжелая библиотека, её не имеет смысла тащить из-за одной фичи, только если есть рассчёт на её плотное использование.


Ops>Буст это не библиотека, а набор библиотек. Большинство очень даже легкие, не генерируют кода на неиспользуемые собственные фичи, и их можно использовать отдельно, не таща ничего лишнего. А для рабочего окружения разработчика буст и целиком не сказать чтобы тяжелый.

Ops>Вот этот подход, что буст "тяжелый" — он от непонимания, что это такое и как устроено.

Я прекрасно понимаю, как работают шаблоны, более того, пытался вырвать из буста куски и скомпилить их. Это тот ещё челлендж. А если всё целиком подключать, то даже если оптимизатор выкинет, вы всё равно это будете компилировать очень долго. Время компиляции, даже если шаблон не инстанцируется или класс не используется, всё равно значительно растёт.
Re[5]: Есть ли метод у класса - HasMethod - старая тема
От: Ops Россия  
Дата: 12.11.19 23:35
Оценка:
Здравствуйте, Molchalnik, Вы писали:

M>Я прекрасно понимаю, как работают шаблоны, более того, пытался вырвать из буста куски и скомпилить их. Это тот ещё челлендж. А если всё целиком подключать, то даже если оптимизатор выкинет, вы всё равно это будете компилировать очень долго. Время компиляции, даже если шаблон не инстанцируется или класс не используется, всё равно значительно растёт.


Вот именно, судишь обо всем скопом. А на деле, надо смотреть конкретный случай, а не отказываться "от буста", будто это такой монолит. Какие-то библиотеки или их части, без "вырывания", как есть, могут быть вполне легкими, никто же не заставляет подключать все. Даже отдельные библиотеки часто не монолитны, и один их функционал может не требовать другой; а со слабой связностью там все достаточно хорошо обстоит. Ну а то что оно у тебя где-то на диске лежит — так ведь каши не просит.
Я могу понять, когда пишут, что такая-то библиотека или функционал не подходит по таким-то причинам (не то что хотелось, долгая компиляция, и т.п.), но когда обобщают на все, это уже перебор.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Есть ли метод у класса - HasMethod - старая тема
От: ViTech  
Дата: 19.11.19 14:00
Оценка:
Ещё можно стащить реализацию из std::experimental::is_detected. А в C++20 определять наличие методов и типов в классе можно будет с помощью концептов.
Пока сам не сделаешь...
Re[2]: Есть ли метод у класса - HasMethod - старая тема
От: Molchalnik  
Дата: 22.11.19 22:29
Оценка: 9 (1)
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Molchalnik, Вы писали:


M>>Искал на нашем форуме SFINAE фишку по определению наличия класса в методе — нашёл только очень старую тему, написанную по старому стандарту, и которую крайне трудно адаптировать, потому что проще для каждого нового метода написать с нуля.


R>Ну и я свои пять копеек вставлю


Добавил в заглавный пост. поправил текст на более единообразный. поставил плюсик.

Потом, возможно, и другие варианты добавлю в заглавный, ежели будет время.

Эх, а мне плюсик за систематизацию ответов по классической теме никто не поставил
Отредактировано 22.11.2019 22:31 Molchalnik . Предыдущая версия .
Re[3]: Есть ли метод у класса - HasMethod - старая тема
От: Erop Россия  
Дата: 03.12.19 06:55
Оценка:
Здравствуйте, Molchalnik, Вы писали:

M>Либо кто-то предоставит язык, с возможностями плюсов, но без legacy. Пока другого универсального языка нет, а есть нишевые — которые теснят плюсы, но теснят скопом, все на одного. Никакой замены или альтернативы плюсам нет.


Пока таких предложили кучу. От D до Go
Скорее всего будет появляться всё больше задач, где востребованы другие свойства стати языков, чем те, коими славны плюсы, и С++ станет таки же нишевым, как сейчас стал С, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Есть ли метод у класса - HasMethod - старая тема
От: Molchalnik  
Дата: 04.12.19 19:00
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Molchalnik, Вы писали:


M>>Либо кто-то предоставит язык, с возможностями плюсов, но без legacy. Пока другого универсального языка нет, а есть нишевые — которые теснят плюсы, но теснят скопом, все на одного. Никакой замены или альтернативы плюсам нет.


E>Пока таких предложили кучу. От D до Go


Плюсы пока мощнее всех, за счёт этого и держатся. им бы тэг типа version 23 {} помог сильно
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.