c++ 类访问关键字"signals"是什么意思?
What does the c++ class access keyword "signals" mean?
我遇到了一个类似的声明(每个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通过用棕色突出显示public
和private
,将其识别为类似于它们的关键字。类似地,vim使用绿色来突出显示关键字namespace
、class
、void
、int
、double
、float
、char
、unsigned
等。
Stackoverflow代码格式化程序不会像突出显示public
和private
那样突出显示上面的signals
!
事实证明,谷歌很难做到这一点(噪音很大),但我没有发现任何提及它的东西,甚至在SO上也没有。我还查看了g++文档的增强部分。
这个代码库很大(2300多万行),老掉牙(~1998),有着明显的重音。例如,相同的类定义在两个成员函数之前具有类访问private slots:
。因此,可能存在一些#define
混淆或欺骗行为,但我在使用grep
时找不到。g++可能已更改,但其--version
输出并不表示已更改。
它不是关键字,如果您使用Qt等框架,它会将"关键字"添加到语言中,以提供不属于标准的附加功能。
例如,在Qt中,该代码由MOC(元对象编译器)预处理,signals
在qobjectdefs.h
中定义为#define signals public
,MOC检查该宏以添加元代码并提供实际的信号槽功能,生成的代码被放入一个名称为"MOC_myClass.cpp"的文件中。
这些不是c++关键字!c++不会编译它们,除非你从Qt库中包含一个头,它会用预处理器使用删除它们
//from qobjectdefs.h
# define slots
# define signals public
这些是Qt库预处理器(moc,元对象编译器)用于处理它们的"标记"。
它们标记在对象之间的信号槽通信机制中使用的方法。只有当类用Q_OBJECT宏标记时,moc才会处理它们,并且这些类必须从QObject继承。
从中,moc在moc_xxxxxx.h和moc_xxxxx.cpp源文件中创建了一个伴随类,其中包含处理信号/插槽机制所需的代码。
即使您有Qt头和库,如果没有qmake生成的源代码,您通常也无法链接代码。
signals
是一个由Qt框架定义的宏,在编译过程中被转换为public
,同时作为Qt的moc
预处理器的信标,用于实现与"信号"answers"槽"的类关系。其他类似的Qt宏包括slots
和Q_SLOTS
。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思