fork download
  1. #include <typeinfo>
  2. #include <string>
  3. #include <map>
  4. #include <iostream>
  5.  
  6. template< typename T >
  7. class declare_type
  8. {
  9. static int n;
  10. };
  11.  
  12.  
  13. struct GenericClassFactory
  14. {
  15. ~GenericClassFactory() {};
  16. virtual void* create( const std::string& rstrClassName ) = 0;
  17. };
  18.  
  19. template <typename T>
  20. struct ClassFactory : public GenericClassFactory
  21. {
  22. virtual void* create( const std::string& rstrClassName )
  23. {
  24. return new T();
  25. }
  26. };
  27.  
  28. class ClassRegister
  29. {
  30. public:
  31. virtual ~ClassRegister()
  32. { // ...
  33. }
  34.  
  35. template< typename T >
  36. static int declare( const std::string& rstrClassName = typeid(T).name() )
  37. {
  38. std::cout << "ClassRegister::declare( " << rstrClassName << " )\n";
  39. return 42;
  40. }
  41.  
  42. static void create( const std::string& rstrClassName )
  43. {
  44. std::cout << "ClassRegister::create( " << rstrClassName << " )\n";
  45. }
  46.  
  47. private:
  48. };
  49.  
  50. template< typename T >
  51. int declare_type<T>::n = ClassRegister::declare<T>();
  52.  
  53.  
  54. template< typename T >
  55. class BaseClass
  56. {
  57. declare_type<T> m_declaration;
  58. };
  59.  
  60. class SomeClass : public BaseClass<SomeClass>
  61. {
  62. public:
  63. void meow();
  64. };
  65.  
  66. //template class declare_type<SomeClass>;
  67.  
  68. int main( void )
  69. {
  70. ClassRegister::create( "9SomeClass" );
  71.  
  72. return 0;
  73. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
ClassRegister::create( 9SomeClass )