Любой способ автоматически генерировать структуры на основе QSharedData?

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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам