c++ - c++ 类访问关键字 "signals"是什么意思?

标签 c++ qt class keyword

我遇到了类似这样的声明(根据 NDA 更改了名称):

class Foo
{
    int  bar;

 public:
    explicit Foo (Fu *parent = NULL);

 private:
    void somefunc (String);

 signals:        // ??? what does this do ???
    void windowClosed();
};

这是由 g++ 4.4.7(大约从 2012 年开始)成功编译的。此外,vim 将其识别为类似于 publicprivate 的关键字,并以棕色高亮显示它们。 (Dis)同样,vim用绿色高亮关键字namespace, class, void, int, doublefloatcharunsigned

Stackoverflow 代码格式化程序不会publicprivate 那样突出显示上面的signals!

事实证明,谷歌很难做到这一点(很多噪音),但我没有发现任何提及它的东西,甚至没有在 SO 上。我还查看了 enhancements section g++ 文档。

这个代码库很大(超过 23 万行),比较陈旧(~1998 年),并且有明显的口音。例如,同一个类定义在两个成员函数之前有类访问 private slots:。所以可能存在一些 #define 混淆或欺骗,但我无法使用 grep 找到它。可能 g++ 已被更改,但它的 --version 输出不表示修改。

最佳答案

它不是关键字,如果您使用的是诸如 Qt 之类的框架,它会将“关键字”添加到语言中以提供不属于标准的附加功能。

例如,在 Qt 中,此代码由 MOC(元对象编译器)预处理,signalsqobjectdefs.h 中定义为 #define signals public ,moc 检查这个宏以添加元代码并提供实际的信号槽功能,生成的代码被放入一个名为“moc_myClass.cpp”的文件中。

关于c++ - c++ 类访问关键字 "signals"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397517/

相关文章:

c++ - 将算法参数设置定义为C++中的独立类是一种好习惯吗?

qt - Qml 项目状态 : previous state

javascript - jQuery 选择不包含类的元素

c++ - 使代码更小以实现多重继承

qt - QML ListView,滚动时如何使列表元素不与标题重叠

java - JAVA中当基类的引用变量指向子类的对象时,内部会发生什么

c++ - 在这种情况下如何从结构中输入字符串数组?

c++ - 改变 uniform_int_distribution 的范围

c++ - 对于 std::tr1::unordered_map,是否有任何类似于 std::map::lower_bound 的等效 std::algorithm?

c++ - Qt 中基本图形应用程序中的填充函数