Qt和可变函数

Edw*_*nge 8 c++ qt variadic-functions

好的,在讲授我在C++中使用C风格的可变参数函数之前......其他一切都证明要求重写Qt MOC.

我想知道的是,你是否可以在Qt对象中拥有一个带有任意数量/类型参数的"槽".问题是我真的希望能够生成具有任意签名槽的Qt对象.由于MOC与标准预处理和模板不兼容,因此不可能采用直接方法.我想出了另一个想法:

struct funky_base : QObject
{
  Q_OBJECT
  funky_base(QObject * o = 0);

public slots:
  virtual void the_slot(...) = 0;
};
Run Code Online (Sandbox Code Playgroud)

如果这是可能的话,因为你可以创建一个QObject派生对象的子类模板,只要你不在其中声明新的Qt东西,我应该能够实现一个派生的模板化类型,它接受的...东西和把它变成合适的预期类型.

如果是,我将如何连接它?这会有用吗?

connect(x, SIGNAL(someSignal(int)), y, SLOT(the_slot(...)));
Run Code Online (Sandbox Code Playgroud)

如果没有人尝试过这种疯狂而且不知道的事情,是的,我最终会自己尝试一下......但是我希望有人已经掌握了我可以利用的知识,然后才可能浪费我的时间.


这个问题试图找到一种方法来为模板化对象设计一个"全能"基类,它可以将Qt信号转换为静态信号,如boost :: signals2或只是基本函数.我想如果我能构建一个采用可变参数模板的插槽,我可以使用TMP重建va_args中的参数.这个问题的答案几乎就是这个问题,但是在插槽之前的切入会被qt机制调用.关于如何制作整个文章的系列文章的第一部分展示了我如何解决这部分问题:

http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html

这是我的旧博客位置.如果你想看到其他奇怪的sh1t,我的个人资料中的新人.

Edw*_*nge 3

显然,人们一直认为这个问题仍然需要回答,因为在我提出这个问题并亲自回答几周后,人们仍在发布他们的回答。所以我想我必须明确地把它作为一个答案,而不是在问题本身和它的第一条评论中:

您不能将可变参数函数用作 Qt 中的信号或槽。

我花费了大量的时间和精力,不仅解决了问题并分享它,而且还解释了问题是如何解决的。请考虑阅读,您甚至可能会学到新的东西。