使用Qt,我对它越来越感到厌烦。Qt不允许我在它的大多数类中使用模板,因为MOC编译器(或者更好的预处理器)是在c++的实际代码生成之前运行的。
Qt内部的Singal/Slot概念有没有合理的替代方案?我读到了关于boost::signals2的文章,但没有发现它是否经过了预处理。
发布于 2015-03-25 04:01:33
Qt不允许我在它的大多数类中使用模板,因为MOC编译器(或更好的预处理器)是在c++的实际代码生成之前运行的。
您可以将模板类与qt信号槽一起使用,但与next restircions一起使用:
必须从QObject
您可以在header for QFutureWatcher class中看到的实现示例。
对于Qt的内部信号/槽概念,有没有合理的替代方案?
如果您只需要对Qt::DirectConnection使用模拟,那么来自here的任何实现都是合适的。如果你还需要Qt::QueuedConnection,我不知道没有额外代码使用的直接类比。例如,Qt::QueuedConnection可以通过boost::signals和boost::asio对象实现。
我读过关于boost::signals2的文章,但是我不知道它是不是经过了预处理。
我理解你的问题,如果不支持可变模板,则需要对boost信号进行预处理。来自boost signal.hpp file
#ifdef BOOST_NO_VARIADIC_TEMPLATES
#include <boost/signals2/preprocessed_signal.hpp>
#else
#include <boost/signals2/variadic_signal.hpp>
#endif发布于 2015-03-24 20:36:56
看看sigslot吧。它非常类似于Qt信号/插槽语法,并且是纯C++:
class Switch
{
public:
signal0<> Clicked;
};
class Light : public has_slots<>
{
public:
void ToggleState();
};
Switch sw;
Light light;
sw.Clicked.connect(&light, &Light::ToggleState);https://stackoverflow.com/questions/29232212
复制相似问题