Advertisement
zamotivator

Untitled

Jul 25th, 2014
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. // для диспетчиризации типов данных
  2. class Meta : trg::TypeIndex<Meta>
  3. {
  4. typedef trg::TypeIndex<Meta> Index;
  5. public:
  6. template <typename T> void registerType();
  7. using Index::get;
  8. static const std::vector<std::string>& typeNames() { return get().m_TypeNames; }
  9. static size_t size() { return typeNames().size(); }
  10. static Meta& get();
  11. private:
  12. Meta();
  13. std::vector<std::string> m_TypeNames;
  14. };
  15.  
  16. template <typename T> void Meta::registerType()
  17. {
  18. Index::add<T>();
  19. assert(Index::get<T>() == m_TypeNames.size());
  20. m_TypeNames.push_back(T::name());
  21. }
  22.  
  23. Meta& Meta::get()
  24. {
  25. static Meta result;
  26. return result;
  27. }
  28.  
  29. Meta::Meta()
  30. {
  31. registerType<A>();
  32. registerType<B>();
  33. registerType<C>();
  34. registerType<D>();
  35.  
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement