Qt中使用的C++语言有多现代?

Pio*_*ost 10 c++ api qt

我听说Qt API是用过时的C++语言编写的.这是真的吗?
有没有计划让它使用更现代的C++语言?有关于此的官方信息吗?

是否有任何项目旨在用更现代的C++包装当前的Qt API结构?

更新
这个问题比模板更重要,这不仅仅是关于当前事态的问题(这就是我用未来标签标记它的原因).

更新
我特别关注Qt API,因为这是该框架的用户使用的.
在API中使用现代C++语言使其更加健壮,灵活且易于使用.
在Qt中使用什么样的C++对我来说重要得多.

Ben*_*oît 27

众所周知,Qt不使用模板,这是一个非常有用的现代c ++功能.但这并不意味着需要Qt API的包装器.Qt使用内部预编译器来解决相同的问题.有些人不喜欢这种方法,但Qt的API非常简单有效,我不相信真正需要对其进行现代化.特别是,信号和插槽,Qt的一个非常令人印象深刻的功能,可以使用模板实现(参见boost.signals库),但Qt实现它的方式仍然更加高效.

我会说"别担心并按原样使用Qt".

编辑:对不起,我忘记了Qt提供的模板容器.但是,Qt的API很少使用模板类.这并不意味着他们不会在Qt中使用它们,或者他们的编码方式已经过时了.

Boost.Signals可能比Qt信号/插槽更强大,但据我所知,没有争论哪个更简单易用.一个非常有说服力的KISS原则实施.

  • 不要忘记Qt的通用模板容器http://doc.trolltech.com/4.5/containers.html :) (6认同)
  • 我个人更喜欢Boost.Signals到Qt信号.Boost.Signals基本上可以挂钩任何可调用的东西,提供类型的编译时检查,并且我发现将信号发射器视为自己的对象更加直观.相比之下,Qt的信号系统受到了限制.我发现自己只使用Qt信号进行ui相关的信号处理,并将Boost信号用于其他所有事情,因为它们允许更灵活的系统.特别是当你有代码库时,你不能在Qt上引入依赖. (3认同)
  • @piotr:我总是非常警惕委员会设计的_anything_.看看阿达. (3认同)
  • 我发现STL编码风格令人不安,Qt很漂亮.他们的容器也包含更多功能,并且更方便.例如,从一个转换到另一个,或调试. (3认同)
  • @litb"这些容器类设计为比STL容器更轻,更安全,更易于使用." 对我来说听起来有点吓人.当标准委员会以外的人试图做出比委员会更好的事情时,我总是很害怕.我想要的最后一件事是必须学习另一个容器类.我很确定,即使没有看到它们,它们也不比STL更好...... :) (2认同)

Hen*_*rtz 17

Qt使用C++语言的现代变体 - 目前是C++ 98,是的模板也适用于适用的地方.Qt对STL有一些支持.参见例如http://qt-project.org/doc/qt-5.1/qtcore/containers.html - 以及例如std :: string的便利函数.这些都在文档中:http://qt-project.org/doc/qt-5.1/qtdoc/index.html ;)关于模板与moc的问题是我们经常得到的问题,我们已经将它添加到我们的文档中; http://qt-project.org/doc/qt-4.8/templates.html

  • @Piotr现在有三个人在SO上活跃,让我们希望Qt Software里面的人气普及;) (2认同)

小智 11

Qt源仅在src/corelib中包含1280次模式"template <".我没有看到这怎么可能被误认为"Qt已知不使用模板"


Krs*_*sna 8

与Boost.Signals不同,Qt通过使用排队连接实现信号/插槽是线程安全的.然而,在2009年5月2日,Boost.Signals2被发布并带来了非常期望的线程安全性.从开发人员的角度来看,Qt的信号/插槽实现更容易使用,主要是因为它不使用模板.为了深入阅读为什么Qt使用moc而不是信号和插槽的模板,这里是他们文档中的一个页面.

对于那些想知道为什么Qt有自己的容器类的人,我很确定主要的动机是提供隐式共享.所有容器类都是隐式共享的,因此每当复制QList时,只复制指向数据的指针.有关Qt中浅层复制的更多信息,请参见此处.


小智 6

为了直接回答您的问题,Qt的API非常全面.我很确定他们会在一段时间内推出QApp :: ParkMyCar()函数.他们有时会采用多种方式来做同样的事情,在效率和易用性方面有不同的立场.查看他们的(优秀)文档.它是全面的,并且不止一次地拯救了我的屁股.

从我所看到的Qt源代码来看,代码非常高效.
看一下安装配置中的功能 - 您可以打开/关闭对各种功能的支持(包括STL,线程甚至GUI).此外,当Trolls将Qt 4打造成时,他们并没有在代码爵士乐中交换功能 - 他们只是提供了更多的功能.鉴于他们的程序员的质量和他们更新主要版本的方式,我认为我们不必担心Qt(或部分)过时.

Qt的目标市场(台式机)是制造Hello Kitty桌面闹钟的MamaPapa公司,并希望一次编码,并确保它在所有"理智"系统上运行 - Windows 98及更高版本,流行的Linux发行版和Mac OS X.这意味着迎合各种系统中所有主编译器的LCD.如果这意味着将代码中的模板向导保持在最低限度,那就这样吧.

  • 我没有问Qt的API是多么全面.我没想问他们的代码效率如何.在2009年支持基于DOS的Windows 98是疯狂的,并且对大多数用户造成了很大的伤害......你不通过支持古代系统来与.NET竞争...... (2认同)
  • 嗯,实际上你做到了.如果你必须与400磅的大猩猩竞争,你就会留下残羹剩饭,你不要面对他. (2认同)

Ari*_*yat 5

在 Qt 4.x 的整个生命周期中,我怀疑重写 Qt 的某些部分以使用“更现代”的 C++ 是否有意义。这是因为 Qt 的同一主要版本中的所有版本仍应是二进制兼容的前提。我们也不能仅仅废弃或弃用客户仍在使用的类(尽管引入新东西是完全可以的,即使对于一组有限的受支持编译器也是如此)。

如果最终 Qt 5 几乎即将问世,并且现代 C++ 结构和功能最终可以在目标支持的平台和编译器中使用,这样做将帮助 C++ 开发人员和客户编写更好、更强大的代码,那么为什么不呢?