我认为库需要使用特殊工具预处理源代码是不合理的.也就是说,有几个人向我推荐了Qt库,用于跨平台GUI开发.
没有预处理步骤,Qt有多可用?
编辑:好的人,我不是把这个问题视为对Qt的抨击 - 太多的Qt粉丝正在对待它,好像它是.我不想讨论Qt提出这个预处理工具的优点.我理解为什么这个工具在那里,我理解为什么Qt设计的大部分都建立在预处理的基础之上.
我从来没有使用过Qt,因此我无法扯掉它.但我宁愿自己写一些少量的样板,而不是依赖于撕掉我的整个构建过程.出于同样的原因,我不会在我当前的项目中使用Flex和Bison; 如果我不使用这些工具,我绝对不会使用其他类型的预处理.
所以,请不要把我当作Qt翻录.我不能评论它有多好或多不好; 我没用过它.我只是想知道是否可以不使用它moc.
Mat*_*gro 26
Qt不需要使用moc来使用它,如果你创建了QObject的子类,它需要使用它,并在你的自定义类中声明信号和槽.
这并非不合理,moc提供了C++没有的功能,信号/插槽,内省等.
因此,要做一些最低级的事情,你将不得不使用moc预处理器.你要么爱它,要么恨它.
现在完全可以使用了。moc 的维护者做了一个比普通 Qt 更冗长的语法的替代方案,但它使用标准的 C++14,所以没有额外的步骤。
(顺便说一句,moc 与其说是代码生成器,不如说是真正的预处理步骤。您编写的代码是有效的 C++,而 moc 不会更改其中的任何内容。它只是为您生成额外的 C++ 代码。)
我不认为Qt需要一个特殊的预处理工具是不合理的,考虑到它是多么庞大和全面的库.
其他类似的综合库(如Boost和GLib)不需要特殊的预处理工具,但会广泛使用标准C预处理器.Qt本来可以仅使用C预处理器实现,但是通过使用自己的特殊预处理工具,它可以提供更清晰的语法并避免与C预处理器宏相关的许多陷阱.
然而,正如已经回答的那样,你可以在没有moc的情况下使用Qt,而不是任何需要信号和插槽的东西.是的,这包括所有的GUI内容,但Qt绝不仅仅是一个GUI库.