+// Shim for the property notifcation signal
+template<typename T>
+struct PropertyNotifcationSignalShim
+{
+ T mFunctor;
+
+ PropertyNotifcationSignalShim(T& functor)
+ : mFunctor(functor)
+ {
+ }
+
+ void operator()(PropertyNotification& /* source */)
+ {
+ mFunctor();
+ }
+};
+
+// Specializations for the different signal connection calls between actor & PropertyNotification
+template<typename T>
+struct SignalConnector
+{
+};
+
+// Actor specialization
+template<>
+struct SignalConnector<Actor>
+{
+ Actor& mActor;
+ ConnectionTracker* mTracker;
+ const std::string& mName;
+
+ SignalConnector<Actor>(ConnectionTracker* tracker, Actor& actor, const std::string& name)
+ : mActor(actor),
+ mTracker(tracker),
+ mName(name)
+ {
+ }
+
+ template<typename T>
+ void Connect(T& functor)
+ {
+ mActor.ConnectSignal(mTracker, mName, functor);
+ }
+};
+
+// PropertyNotification specialization
+template<>
+struct SignalConnector<PropertyNotification>
+{
+ PropertyNotification& mNotification;
+ ConnectionTracker* mTracker;
+
+ SignalConnector<PropertyNotification>(ConnectionTracker* tracker, PropertyNotification& notification)
+ : mNotification(notification),
+ mTracker(tracker)
+ {
+ }
+
+ template<typename T>
+ void Connect(T& functor)
+ {
+ mNotification.NotifySignal().Connect(mTracker, PropertyNotifcationSignalShim<T>(functor));
+ }
+};