我们可以通过 D-bus 访问数据成员和指向对象的指针吗?

Posted

技术标签:

【中文标题】我们可以通过 D-bus 访问数据成员和指向对象的指针吗?【英文标题】:Can we access data-members and pointers to objects over the D-bus? 【发布时间】:2012-01-18 05:41:19 【问题描述】:

我一直在访问公开的成员函数,对应于通过 D-Bus 公开的对象。有什么方法可以让我访问(公共)数据成员吗?如果有,怎么做?

我也在这里阅读-

[http://www.qtcentre.org/archive/index.php/t-24238.html]

不能通过 D-Bus 传递指针。只是想确认一下。

【问题讨论】:

【参考方案1】:

能否访问对象的数据成员取决于它们是声明为public 还是private。查看头文件中的类(或结构)定义。这是真的,与类映射到 D-Bus 上的某些东西这一事实无关,尽管假设类编写不正确并允许您执行 D-Bus 不支持的事情,在这种情况下,我从提供的信息中无法知道会发生什么。

class DBusThing

  int seeBelowMember;
public:
  int accessibleMember;
  int accessibleMethod(int argument);
private:
  int inaccessibleMember;


void someFunc()

   DBusThing foo;
   int ret = foo.accessibleMethod(5); // legal
   foo.accessibleMember=5; // legal
   foo.inaccessibleMember=5; // illegal
   foo.seeBelowMember=5; // illegal because DBusThing is declared class.
   // If DBusThing had been declared struct, seeBelowMember would be accessible.

我判断这门课可能是正确编写的,并且会阻止你尝试不可能的事情。

【讨论】:

是的,我同意无法访问私人成员。我关心的是如何准确地访问公共的。我使用 QDBusMessage::createMethodCall( const QString & service, const QString & path, const QString & interface, const QString & method ) 方法在 Qt-Dbus 上调用方法。在这种情况下,我无法找出如何准确访问数据成员?我想你是在我编辑我的问题之前发布的。无论如何,感谢您的快速回复。 @Amit 我确实在您编辑之前发布过。在堆栈溢出时,这里有一个相当健康的 QT 标签。当您有关于 QT 库的问题时,这样说并使用标签会很有用。

以上是关于我们可以通过 D-bus 访问数据成员和指向对象的指针吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我可以通过指向派生对象的基类指针访问派生私有成员函数?

C++ const 修饰符

C++大纲及疑惑点三

C++大纲及疑惑点三

C++大纲及疑惑点三

C++指向对象成员函数的指针