]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/reflection.h
Make it possible to find reflected classes by RTTI
[libs/game.git] / source / game / reflection.h
index df974b113d3f32a22a1b1b36227d4be654a0193b..6d8535dec003e5d8d7ef3449ecc3ca01dea4dbaf 100644 (file)
@@ -93,8 +93,10 @@ private:
        std::vector<std::unique_ptr<ClassBase>>::const_iterator lower_bound(const std::type_index &) const;
 
 public:
+       ClassBase *find_class(const std::type_index &) const;
+
        template<typename T>
-       Class<T> *find_class() const;
+       Class<T> *find_class() const { return static_cast<Class<T> *>(find_class(typeid(T))); }
 
        template<typename T>
        Class<T> &get_or_create_class();
@@ -109,14 +111,6 @@ inline std::vector<std::unique_ptr<ClassBase>>::const_iterator Reflector::lower_
        return std::ranges::lower_bound(classes, type, {}, [](auto &c){ return c->get_type(); });
 }
 
-template<typename T>
-inline Class<T> *Reflector::find_class() const
-{
-       std::type_index type = typeid(T);
-       auto i = lower_bound(type);
-       return (i!=classes.end() && (*i)->get_type()==type ? static_cast<Class<T> *>(i->get()) : nullptr);
-}
-
 template<typename T>
 inline Class<T> &Reflector::get_or_create_class()
 {