Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // для диспетчиризации типов данных
- class Meta : trg::TypeIndex<Meta>
- {
- typedef trg::TypeIndex<Meta> Index;
- public:
- template <typename T> void registerType();
- using Index::get;
- static const std::vector<std::string>& typeNames() { return get().m_TypeNames; }
- static size_t size() { return typeNames().size(); }
- static Meta& get();
- private:
- Meta();
- std::vector<std::string> m_TypeNames;
- };
- template <typename T> void Meta::registerType()
- {
- Index::add<T>();
- assert(Index::get<T>() == m_TypeNames.size());
- m_TypeNames.push_back(T::name());
- }
- Meta& Meta::get()
- {
- static Meta result;
- return result;
- }
- Meta::Meta()
- {
- registerType<A>();
- registerType<B>();
- registerType<C>();
- registerType<D>();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement