xo-reflect: + Object (cache TypeId for dispatching)
This commit is contained in:
parent
2c51a1e1a0
commit
58e143f1b1
1 changed files with 44 additions and 0 deletions
44
include/xo/reflect/Object.hpp
Normal file
44
include/xo/reflect/Object.hpp
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
** @file Object.hpp
|
||||
*
|
||||
* Author: Roland Conybeare
|
||||
**/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "xo/reflect/SelfTagging.hpp"
|
||||
//#include <cstdint>
|
||||
|
||||
namespace xo {
|
||||
namespace reflect {
|
||||
/** @class Object
|
||||
*
|
||||
* @brief A swiss-army-knife base class for runtime polymorphism.
|
||||
*
|
||||
* Promote using this:
|
||||
* - for interpreter integration (see xo-expression / xo-jit)
|
||||
* - to allow reasonably efficient type dispatching -
|
||||
* don't need to pay for a function call to find out dispatching type.
|
||||
**/
|
||||
class Object : public reflect::SelfTagging {
|
||||
public:
|
||||
using TypeId = xo::reflect::TypeId;
|
||||
|
||||
Object(TypeId type_id) : type_id_{type_id} {}
|
||||
|
||||
private:
|
||||
/** unique id number for this object's type
|
||||
*
|
||||
* Caches the value of this->self_tp().td()->id()
|
||||
*
|
||||
* Notes:
|
||||
* 1. may want to record metatype also
|
||||
* 2. a few builtin types have well-known type_ids.
|
||||
* see TypeDescrTable ctor in xo-reflect.
|
||||
**/
|
||||
TypeId type_id_;
|
||||
};
|
||||
} /*namespace obj*/
|
||||
} /*namespace xo*/
|
||||
|
||||
|
||||
/** end Object.hpp **/
|
||||
Loading…
Add table
Add a link
Reference in a new issue