WARNING: I AM USING C++11. Using typeid(type).hash_code() instead of BFObjectType