]> code.bitgloo.com Git - clyne/entityx.git/commitdiff
Added std::forward in order to respect move semantics in some methods.
authorscott-linder <scott.b.linder@wmich.edu>
Tue, 31 Dec 2013 00:33:17 +0000 (19:33 -0500)
committerscott-linder <scott.b.linder@wmich.edu>
Tue, 31 Dec 2013 00:51:07 +0000 (19:51 -0500)
Previously, calls to the methods assign<C>(...), emit<E>(...), and add<S>(...)
would fail if constructor arguments relied upon move semantics.

entityx/Entity.h
entityx/Event.h
entityx/System.h

index 957737539e2b97e1fcd06aa92325a78408e54ea8..1758c3fc58dcc0313cffaa28ac510b1c97f4049b 100644 (file)
@@ -474,7 +474,7 @@ class EntityManager : entityx::help::NonCopyable, public enable_shared_from_this
    */
   template <typename C, typename ... Args>
   ptr<C> assign(Entity::Id entity, Args && ... args) {
-    return assign<C>(entity, ptr<C>(new C(args ...)));
+    return assign<C>(entity, ptr<C>(new C(std::forward<Args>(args) ...)));
   }
 
   /**
@@ -630,7 +630,7 @@ ptr<C> Entity::assign(ptr<C> component) {
 template <typename C, typename ... Args>
 ptr<C> Entity::assign(Args && ... args) {
   assert(valid());
-  return manager_.lock()->assign<C>(id_, args ...);
+  return manager_.lock()->assign<C>(id_, std::forward<Args>(args) ...);
 }
 
 template <typename C>
index e60e7d713a594b323293e997d6194aef02172f9f..dac1bb47891ee385aa5a768e6f86e0a091b63565 100644 (file)
@@ -160,7 +160,7 @@ class EventManager : entityx::help::NonCopyable {
    */
   template <typename E, typename ... Args>
   void emit(Args && ... args) {
-    E event(args ...);
+    E event(std::forward<Args>(args) ...);
     auto sig = signal_for(E::family());
     sig->emit(static_cast<BaseEvent*>(&event));
   }
index 132b8b9ec80d42df6434b73ac842f3c6a46b82b3..9c0b2ecde0398cbbf9e74615632804caf6eccabc 100644 (file)
@@ -12,6 +12,7 @@
 
 
 #include <unordered_map>
+#include <utility>
 #include <stdint.h>
 #include <cassert>
 #include "entityx/config.h"
@@ -108,7 +109,7 @@ class SystemManager : entityx::help::NonCopyable, public enable_shared_from_this
    */
   template <typename S, typename ... Args>
   ptr<S> add(Args && ... args) {
-    ptr<S> s(new S(args ...));
+    ptr<S> s(new S(std::forward<Args>(args) ...));
     add(s);
     return s;
   }