LINUX.ORG.RU

GSoap и современный C++

 , gsoap,


0

3

Реально эту штуку заставить генерировать код хотя бы на C++11 чтобы не void*, а std::unique_ptr и так далее было? Ну и хоть кто-то по-человечески с объявлением функций, дабы это всё не выглядело как обертка на С.

Ответ на: комментарий от monk

Вообще, если геттер изменяет состояние объекта, это очень неожиданно.

даже если вам нужно формально иметь const у геттера, он может менять состояние другого обьекта, а не свое. например состояние некоего прицепленного кеша.

а если это страшно - пишите геттер, который не меняет ничто.

но в с++ геттеров и сеттеров нет вообще, как синтаксической конструкции, потому непонятно о чем тут разговор

alysnix ★★★
()
Ответ на: комментарий от anonymous

можно и нужно. потому правильно, что в с++ нет специальных геттеров/сеттеров.

просто надо закрывать все внутренние переменные, и писать для кода «высокого полета» спец. функции «изменения и чтения состояния».

а специальные геттеры/сеттеры в языке - это лишнее.

alysnix ★★★
()
Ответ на: комментарий от alysnix

даже если вам нужно формально иметь const у геттера, он может менять состояние другого обьекта, а не свое. например состояние некоего прицепленного кеша.

Я не про формальность, я про семантику. Если Я пишу object.getValue() я не ожидаю, что состояние object внезапно изменится.

но в с++ геттеров и сеттеров нет вообще, как синтаксической конструкции, потому непонятно о чем тут разговор

Синтаксической нет. Семантически *.get_*, *.set_* используются массово.

а если это страшно - пишите геттер, который не меняет ничто.

И лучше сразу на Haskell.

monk ★★★★★
()
Ответ на: комментарий от monk

Если Я пишу object.getValue() я не ожидаю, что состояние object внезапно изменится.

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

А даже если она есть, в силу того что «состояние обьекта» может быть размытым, и зависеть от других обьектов, то даже декларация const не обеспечивает реальной константности.

короче никакой это не const в общем случае, даже при соблюдении всех правил приличий в виде вполне себе safe кода.

alysnix ★★★
()
Ответ на: комментарий от anonymous

Выдумали классы. В Си struct и все счастливы.

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

эти ваши рассуждалки онтологическим категориям как слону дробина.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от anonymous

Несовсем понял что monk хотел сказать. Может быть речь о том, что поля классов могут ссылаться на элементы других классов без всякой иерархии самих классов?

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

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

alysnix ★★★
()
Ответ на: комментарий от anonymous

Пошли на второй круг. Я там давал диаграмму наследования для класса - FontDialog wxWidgets. И там глубина наследования - 6.

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

Но это предметные области из процесса познания примерно 2-3 летнего ребенка.

Мышление уже 6 летнего ребенка вполне сложное и там нужны классы

alysnix ★★★
()
Ответ на: комментарий от anonymous

вот кстати. ребенок в возрасте до года уже различает понятия мама, сися, горшок, кушать, какать, спать.

то есть его онотологический набор уже вполне сложен, и ложится на некую диаграмму классов. и значит выразим в с++.

alysnix ★★★
()
Ответ на: комментарий от anonymous

на знаю что такое в с++ allocate. malloc что-ли?

в си++ у new варианты - можно захватить память на куче, а можно передать в new уже адрес, и тогда обьект там сконструируется. то есть не на куче.

не знаю разницы между классом и структорой, кроме видимости членов и наследования по дефолту.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от anonymous

Кстати иногда class правильно работает и при использовании allocate, но лучше такие хаки не использовать.

пока не выясним, что такое allocate и препираться нет смысла.

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

а malloc просто хватанет память с мусором внутри и отдаст вам.

alysnix ★★★
()
Ответ на: комментарий от alysnix

в си++ у new варианты - можно захватить память на куче, а можно передать в new уже адрес, и тогда обьект там сконструируется. то есть не на куче.

Конечно речь шла об malloc. Да можно и так. Так вот если private не используем, то можно struct использовать. Алгоритм при этом много не усложнится. При испоьзовании new обычно создаётся vtable, при allocate не создаётся.

anonymous
()
Ответ на: комментарий от anonymous

При испоьзовании new обычно создаётся vtable, при allocate не создаётся

не создается vtable, обьекту ставится указатель на vtable класса. это делает конструктор.

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от anonymous

malloc просто выделяет память требуемого размера и отдает клиенту. это мусорная память, ее надо как-то инициализировать под обьект.

вот если на нее напутстить конструктор класса, то память будет инициализирована как правильный обьект данного класса. все делает конструктор.

а malloc это просто вызов менеджера памяти, который может быть алгоритмически любым.

alysnix ★★★
()
Ответ на: комментарий от alysnix

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

Не приписывайте мне свои домыслы. Я хотел придумать аргумент, почему нежелательна иерархия больше 3 ступеней. И даже его привёл, но вместо ответа на аргумент получил обвинение в том, что я вообще против иерархических данных.

monk ★★★★★
()
Ответ на: комментарий от monk

Я хотел придумать аргумент, почему нежелательна иерархия больше 3 ступеней.

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

то есть высказывание «глубина 3» - заведомо неправильно.

берете количество сущностей N, оцениваете среднее количество наследников P, и берете логарифм от N по основанию P.

причем тут вообще 3???

alysnix ★★★
()
Ответ на: комментарий от alysnix

берете количество сущностей N, оцениваете среднее количество наследников P, и берете логарифм от N по основанию P.

Чем больше N, тем больше должно быть P, а не глубина. Вот биологам на миллион видов живых существ достаточно шесть уровней.

И даже если опишут все остальные (которых примерно в тысячу раз больше), дополнительные уровни добавлять не будут.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 3)
Ответ на: комментарий от alysnix

причем тут вообще 3???

При том, что это то количество слоёв, на которое нормально можно разделить систему. При увеличении почти всегда оказывается, что функция внесена не на тот уровень и надо всё переделывать. А переделка это дорого, поэтому начинают лепить химер.

monk ★★★★★
()
Ответ на: комментарий от monk

Вот биологам на миллион видов живых существ достаточно шесть уровней.

Определитесь. Вы же только что настаивали, что хватит и 3.

Биология это просто ветвь на древе классификации, а само древо начинается от элементарных частиц и кончается вселенной. И там будет не 6 уровней.

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

короче вы рассматриваете только часть общего древа.

alysnix ★★★
()
Ответ на: комментарий от alysnix

потому что ниже, условно говоря, находится физика и химия,

Объект царства растений с точки зрения физики и химии к каким классам относится?

а выше социология

На какие классы социология подразделяет вид Taraxacum farinosum ?

monk ★★★★★
()
Ответ на: комментарий от monk

На любую систему адекватного размера хватит и 3.

каким образом получается три из шести? пока что фигурировали только факты с иерархией 6, или там дураки сидят, в биологах этих. и разрабах всяких там wxWidgets

alysnix ★★★
()
Ответ на: комментарий от monk

Ныне решил с использованием своего API сделать веточку crt аналогичную 1С 8.3. Интересно то, что это API можно использовать с любым ЯП. Так вот у меня классы вовсе не используются. Лишь в биндингах для COM.

anonymous
()
Ответ на: комментарий от monk

Объект царства растений с точки зрения физики и химии к каким классам относится?

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

очевидно, что биология невозможна без химии, которая сама подразделятся на разные дисциплины.

цветочек с точки зрения химии и физики есть сложный комплекс атомов и молекул с протекающими там всевозможными реакциями.

молекулы есть совокупности атомов, пространственно связанные силами, имеющими физическую природу.

атомы есть квантовые системы, взаимодействующих квантовых обьектов разной конфигурации.

квантовые обьекты есть….

это я еще 4 уровня набросил.

alysnix ★★★
()
Ответ на: комментарий от anonymous

В 1С 7.7 всё работает. Но у меня нет вовсе цели насолить фирме 1С. Например можно в 1С 7.7 писать код в стиле 1С 8.3. А можно на Python, С++, С, … CRT не сложно разработать, но конечно трудоёмко.

anonymous
()
Ответ на: комментарий от alysnix

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

При чём тут это к классификации живых объектов? Вас когда спрашивают о надклассе для диалога, Вы вспоминаете о том, что его можно скомпилировать в LLVM и ассемблер?

Кстати, у научных дисциплин, которых очень много, всего два уровня классификации. Фундаментальные/прикладные и естественные/гуманитарные/…

цветочек с точки зрения химии и физики есть сложный комплекс

молекулы есть совокупности атомов, пространственно связанные силами, имеющими физическую природу.

Ну вот, здесь вообще ООП нет. Ни молекула ни цветочек не наследуются от некоего более общего класса. Они содержат какие-то взаимодействующие компоненты. Как принято в Rust.

monk ★★★★★
()
Ответ на: комментарий от monk

Ни молекула ни цветочек не наследуются от некоего более общего класса

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

alysnix ★★★
()
Ответ на: комментарий от monk

При чём тут это к классификации живых объектов?

живой обьект - это имя класса. и он не висит в невесомости, а сам встроен в некую иерархию.

короче глубина три - это онтология для детей на горшке.

alysnix ★★★
()
Ответ на: комментарий от alysnix

живой обьект - это имя класса. и он не висит в невесомости, а сам встроен в некую иерархию.

Иерархия определяется через «любой объект класса-потомка является объектом класса предка». Если Вы утверждаете, что к биологической иерархии можно добавить какие-то классы из других дисциплин, то укажите какие. Ни молекулой ни атомом живое существо определённо не является.

короче глубина три - это онтология для детей на горшке.

Глубина три — это адекватная иерархия, которую можно поддерживать.

Больше — если надо намертво похоронить возможность изменений.

monk ★★★★★
()
Ответ на: комментарий от monk

Вот GUI здорового человека: https://docs.racket-lang.org/gui/Windowing_Classes.html

Максимальная вложенность три: например, panel% / vertical-panel% / group-box-panel% . Всё остальное только реализация интерфейсов.

monk ★★★★★
()