7 #ifndef _QITYPE_DETAIL_SIGNAL_HXX_
8 #define _QITYPE_DETAIL_SIGNAL_HXX_
12 #include <boost/bind.hpp>
18 template <
typename F,
typename Arg0,
typename... Args>
23 createNewTrackLink(curId, trackLink);
25 connect(
qi::bind(std::forward<F>(func), std::forward<Arg0>(arg0), std::forward<Args>(args)...));
46 createNewTrackLink(curId, trackLink);
48 boost::bind(&SignalF<T>::disconnectTrackLink,
this, curId),
49 (boost::function<U>&)signal,
50 boost::weak_ptr<SignalBasePrivate>(signal._p)));
56 template <
typename... P>
59 typedef void(ftype)(P...);
62 createNewTrackLink(curId, trackLink);
64 boost::bind(&SignalF<T>::disconnectTrackLink,
this, curId),
65 (boost::function<ftype>&)signal,
66 boost::weak_ptr<SignalBasePrivate>(signal._p)));
96 return connect(SignalSubscriber(obj, slot));
105 static_assert(
sizeof(T) < 0,
"You can't instanciate BounceToSignalBase");
111 #define pushArg(z, n, _) \
112 args.push_back(AutoAnyReference(p ##n));
113 #define makeBounce(n, argstypedecl, argstype, argsdecl, argsues, comma) \
114 template<typename R comma argstypedecl> \
115 class BounceToSignalBase<R(argstype)> { \
117 BounceToSignalBase(SignalBase& signalBase) : signalBase(signalBase) {} \
118 R operator()(argsdecl) { \
119 AnyReferenceVector args; \
120 BOOST_PP_REPEAT(n, pushArg, _); \
121 signalBase.trigger(args); \
124 SignalBase& signalBase; \
144 return detail::functionArgumentsSignature<T>();
154 #endif // _QITYPE_DETAIL_SIGNAL_HXX_
boost::function< void(bool)> OnSubscribers
SignalSubscriber & setCallType(MetaCallType ct)
BounceToSignalBase(SignalBase &sb)
void _setSignature(const Signature &s)
SignalSubscriber & connect(boost::function< F > func)
SignalSubscriber & connect(...)
virtual qi::Signature signature() const
Force a synchronous call.
#define makeBounce(n, argstypedecl, argstype, argsdecl, argsues, comma)
MetaCallType threadingModel
Object< Empty > AnyObject
static AnyFunction from(F &&func)
SignalF(OnSubscribers onSubscribers=OnSubscribers())
auto trackWithFallback(boost::function< void()> onFail, F &&f, Arg0 &&arg0) -> decltype(detail::BindTransform< Arg0 >::wrap(std::forward< Arg0 >(arg0), std::forward< F >(f), std::move(onFail)))
std::enable_if< std::is_function< RF >::value, boost::function< RF > >::type bind(AF &&fun, Arg0 &&arg0, Args &&...args)