"in"和"out"在参数方向上是什么意思?

What does "in" and "out" mean in arg direction?

本文关键字:是什么 意思 方向 参数 in out      更新时间:2023-10-16

在本教程中,我发现了

class Chat : public QObject
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "demo.Chat")
Q_PROPERTY( QStringList users READ users)
signals:
void userAdded(const QString& user);
void userRemoved(const QString& user);
void messageSent(const Message &message);
public slots:
void addUser(const QString &user);
void removeUser(const QString &user);
void sendMessage(const Message &message);
public:
Chat(QObject* parent = 0);
virtual ~Chat();
QStringList users() const;
private:
QStringList m_users;
};

可以生成

......
<signal name="userRemoved">
<arg name="user" type="s" direction="out"/>
</signal>
<method name="addUser">
<arg name="user" type="s" direction="in"/>
</method>
......

"out"answers"in"在这里是什么意思?

来自D-Bus教程:

方法和信号

每个对象都有成员;两种成员是方法和信号。方法是可以在对象上调用的操作,具有可选的输入(也称为参数或"输入参数"(和输出(也称为返回值或"输出参数"(。信号是从物体向物体的任何感兴趣的观察者的广播;信号可以包含数据有效载荷。

来自D-Bus规范:

方法的

[…]参数通常被称为";在";(这意味着在METHOD_CALL中发送(,或";out";(这意味着在METHOD_RETURN中返回(。


<arg>在这种情况下它默认为"0";在";对于方法调用和";out";用于信号。信号只允许";out";所以,虽然可以指定方向,但毫无意义。

direction属性描述参数是为函数输入的,还是将返回给调用方的输出。对于信号,只允许输出参数。一个函数可能有多个out参数,您可以在这里查看示例。

在您的特定情况下,userRemoved是通过D-Bus传输新用户的信号,因此user参数是面向外部的值。然而,addUser是一个将通过D-Bus调用的函数,user将是它的输入,它是一个向内的值,将通过D-Bus到达,而不是从该对象发送。