C++ 信号/插槽概念和模板。。。选择?
使用Qt我越来越讨厌它了。QT不允许我在大多数类中使用模板,因为在C++的实际代码生成之前运行MOC编译器(或更好的预处理器)。 Qt的内部信号/插槽概念是否有合理的替代方案?我读过boost::signals2,但无法确定它是否经过预处理。请查看。它非常类似于Qt信号/插槽语法,是纯C++:C++ 信号/插槽概念和模板。。。选择?,c++,qt,signals-slots,C++,Qt,Signals Slots,使用Qt我越来越讨厌它了。QT不允许我在大多数类中使用模板,因为在C++的实际代码生成之前运行MOC编译器(或更好的预处理器)。 Qt的内部信号/插槽概念是否有合理的替代方案?我读过boost::signals2,但无法确定它是否经过预处理。请查看。它非常类似于Qt信号/插槽语法,是纯C++: class Switch { public: signal0<> Clicked; }; class Light : public has_slots<> { publi
class Switch
{
public:
signal0<> Clicked;
};
class Light : public has_slots<>
{
public:
void ToggleState();
};
Switch sw;
Light light;
sw.Clicked.connect(&light, &Light::ToggleState);
类开关
{
公众:
点击信号0;
};
类灯:公共有\u插槽
{
公众:
void ToggleState();
};
开关开关;
光;
sw.Clicked.connect(&light,&light::ToggleState);
QT不允许我在大多数类中使用模板,因为在C++的实际代码生成之前运行MOC编译器(或更好的预处理器)。 您可以将模板类用于qt信号插槽,但用于下一个restircions:
#ifdef BOOST_NO_VARIADIC_模板
#包括
#否则
#包括
#恩迪夫
BooSt.StulalS2是一个纯C++解决方案,没有预处理/预编译/其他类似的东西。我甚至在Qt旁边使用过它,而且效果很好。我最终得到了用于GUI的Qt信号和用于内部逻辑的Boost信号。您能提供确切的情况吗?您需要从QObject获得模板+继承吗?在大多数情况下,可能会有一些很好的解决办法。例如,如果不是插槽,您可以使用模板方法。另外,看一看。
#ifdef BOOST_NO_VARIADIC_TEMPLATES
#include <boost/signals2/preprocessed_signal.hpp>
#else
#include <boost/signals2/variadic_signal.hpp>
#endif