Qt 有没有办法自动生成基于QSharedData的结构?

Qt 有没有办法自动生成基于QSharedData的结构?,qt,qshareddata,Qt,Qshareddata,Qt内置支持通过QSharedData和QSharedData指针创建具有集成引用计数的对象。所有这些都很好,但对于每个这样的对象,我需要编写大量代码:QSharedData-基于构造函数和复制构造函数的实现类,对象类itsef,以及每个字段的访问器方法 对于具有5-10个字段的简单结构,这需要大量几乎相同的代码。这是自动生成此类类的一些方法吗?可能是存在一些生成器,它们对所有访问器进行简短的描述并自动生成实现类和对象类?我不认为这些生成器会存在,但我建议两件事: (ab)使用现有的共享容器(

Qt内置支持通过
QSharedData
QSharedData指针
创建具有集成引用计数的对象。所有这些都很好,但对于每个这样的对象,我需要编写大量代码:
QSharedData
-基于构造函数和复制构造函数的实现类,对象类itsef,以及每个字段的访问器方法


对于具有5-10个字段的简单结构,这需要大量几乎相同的代码。这是自动生成此类类的一些方法吗?可能是存在一些生成器,它们对所有访问器进行简短的描述并自动生成实现类和对象类?

我不认为这些生成器会存在,但我建议两件事:

  • (ab)使用现有的共享容器(QVector、QList…)
  • 阅读和上的文档(带示例)
这两个子类都有简单的示例,展示了如何实现看起来的共享性。我不能再帮你了,因为我从来没有必要创造我自己的


再想一想,为什么不公开所有的数据字段,并使用QSharedData派生作为具有引用计数的类似结构的类?封装可能不太好,但如果小心的话,不会发生任何错误。

在使用QSharedData/Pointer时,通常不必实现copy-ctor或operator=。默认的impls复制/分配QSharedData派生成员,这通常做正确的事情(TM)。 对于public类,您需要实现创建私有对象的ctor,如果私有类不是在头中声明的,而是在实现中声明的(哪一个更好),则需要一个dtor(不做任何事情,唯一的一点是在私有声明之后的.cpp中没有内联和定义)。 对于私有类,不需要方法/ctor/dtor实现。 对于简单的基于值的类,编写setter当然是乏味的,但如果使用普通的私有成员变量,情况也是如此。LOC中的开销不会随着成员数量的增加而增加


不,据我所知,没有标准的生成器解决方案,尽管编写脚本或emacs宏等并不难。将这些东西添加到一个公开可用的工具箱或QtCreator中可能是有意义的…

我们一直在使用python和cheetah模板作为一个影响较小的代码生成引擎。我们用python编写简单的解析器,获取数据并进行准备,然后通过cheetah模板完成填充