Любой способ автоматически генерировать структуры на основе QSharedData? - PullRequest
1 голос
/ 14 июня 2010

Qt имеет встроенную поддержку для создания объектов со встроенным подсчетом ссылок через QSharedData и QSharedDataPointer. Все прекрасно работает, но для каждого такого объекта мне нужно написать много кода: класс реализации на основе QSharedData с конструктором и конструктором копирования, класс объекта itsef с методами доступа для каждого поля.

Для простых структур с 5-10 полями это действительно требует много одинакового кода. Есть ли способы автоматизации генерации таких классов? Может быть, существуют некоторые генераторы, которые берут краткое описание и автоматически генерируют класс реализации и класс объекта со всеми средствами доступа?

Ответы [ 2 ]

1 голос
/ 14 июня 2010

При использовании QSharedData / Pointer вам обычно не нужно реализовывать copy ctor или operator =.По умолчанию подразумевается копирование / назначение производного от QSharedData члена, который обычно выполняет правильную задачу (TM).Для открытого класса вам нужно реализовать ctor, создающий закрытый объект, и если закрытый класс не объявлен в заголовке, а в реализации (что лучше), dtor (ничего не делая, единственное, что невстроенный и определенный в .cpp, после частного объявления).Для закрытого класса реализации метода / ctor / dtor не требуется.Для простых классов, основанных на значениях, написание сеттеров, конечно, утомительно, но то же самое верно, если вы используете простые закрытые переменные-члены.Издержки в LOC не растут с увеличением числа членов.

И нет, для меня не существует стандартного решения для генератора, хотя написание скрипта или макроса emacs и т. Д., Выполняющих это, не так сложно,Вероятно, имеет смысл добавить такие вещи в общедоступный набор инструментов или QtCreator ...

1 голос
/ 14 июня 2010

Я не думаю, что генераторы могли бы существовать для этих вещей, но я предлагаю две вещи:

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

Подумав, почему бы не сделать все поля данных общедоступными и использовать производную QSharedData в качестве struct-likeкласс с подсчетом ссылок?Может быть, это плохо для инкапсуляции, но если вы осторожны, ничего плохого не произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...