Extended RTTI with boost - and idea

Hello all, There are many cases in the "real world" when developers need something like 'moc' utility from the Qt distribution. For example, such utility could add some extended RTTI into classes and structures, add auto-generated serialization/initialization/ assignment/comparation code, defines something like properties, and so one. I think it could be good idea to add something like 'moc' into boost distribution and to make it standard development tool. How could it works. Assume we have a code like this: class SomeClass { MIG_INFO; public: //... public MIG_MEMBERS: int Member1; double Member2; void SomeMethod1(); int SomeMethod2(int, double); protected MIG_MEMBERS: //... private MIG_MEMBERS: //... }; Here is 'MIG' (for example) is abbreviation of 'MetaInfo Generator'. After preprocess with 'mig' following code could be generated (in separated .cpp): // Retrieving members info for this class const std::vector<__MemberInfo>& SomeClass::__GetMembersInfo() { static std::vector<__MemberInfo> members = InitMembersInfo<SomeClass>(); return members; } // Runtime method invocation template<typename R> R SomeClass::__Invoke(const char* memberName) { // autogenerated methods invocation code } // __Invoke methods for another numbers of arguments // Autogenerated assignment operation void SomeClass::__Assign(const SomeClass& other) { Member1 = other.Member1; Member2 = other.Member2; } Declaration of this methods in the class scope hides with macros MIG_INFO (like Q_OBJECT in the QT). __MemberInfo is a struct wich contains some information about class member. Such as member name, member kind (method, data member), visibility (public, protected, private) and so on. MIG_MEMBERS is a macro which indicate what following members should be preprocessed by mig. It's just an idea how to bring more "zero-cost" extended RTTI into C++ with boost. -- Best regards Sergey mailto:flex_ferrum@artberg.ru
participants (1)
-
Sergey Sadovnikov