@@ -79,6 +79,22 @@ class Simple
7979 std::string lastMessage;
8080};
8181
82+ // Simple Class Factory
83+ // ====================
84+ class SimpleFactory
85+ {
86+ public:
87+ void * NewSimple ( std::string firstMessage )
88+ {
89+ return new Simple ( firstMessage );
90+ }
91+
92+ void DeleteSimple ( void * simple )
93+ {
94+ delete ( ( Simple* )simple );
95+ }
96+ };
97+
8298// Register Classes + Methods
8399// ==========================
84100ECS_REGISTER_CLASS ( Simple )
@@ -88,6 +104,10 @@ ECS_REGISTER_METHOD_VOID( Simple, ShowLots, unsigned long, char* )
88104ECS_REGISTER_METHOD_RETURN( Simple, GetLastMessage, std::string )
89105ECS_REGISTER_METHOD_VOID( Simple, ShowPtr, void * )
90106
107+ ECS_REGISTER_CLASS( SimpleFactory )
108+ ECS_REGISTER_METHOD_RETURN( SimpleFactory, NewSimple, void *, std::string )
109+ ECS_REGISTER_METHOD_VOID( SimpleFactory, DeleteSimple, void * )
110+
91111// =================================================================================================
92112
93113// Main
@@ -103,17 +123,19 @@ int main()
103123 Ecs_Init_Simple_GetLastMessage ();
104124 Ecs_Init_Simple_ShowPtr ();
105125
126+ Ecs_Init_SimpleFactory ();
127+ Ecs_Init_SimpleFactory_NewSimple ();
128+ Ecs_Init_SimpleFactory_DeleteSimple ();
129+
106130 // Initialize EcsPython
107131 // ====================
108132 Ecs_Initialize ();
109133
110- // Create New Class Instance
111- // =========================
112- Simple* newSimple = new Simple ( " (first message)" );
113134
114- // Expose Class Instance To Python
115- // ===============================
116- Ecs_Expose_Object ( newSimple, " newSimple" );
135+ // Create And Expose Class Instance To Python
136+ // ==========================================
137+ Simple newSimple ( " (first message)" );
138+ Ecs_Expose_Object ( &newSimple, " newSimple" );
117139
118140 // Use Exposed Class Instance From Python
119141 // ======================================
@@ -136,9 +158,21 @@ int main()
136158
137159 // Use Class Instance From C++
138160 // ===========================
139- std::cout << newSimple->GetLastMessage ().c_str ();
161+ std::cout << " Ok, " << newSimple.GetLastMessage ().c_str () << std::endl;
162+
163+
164+ // Create And Expose Factory To Python
165+ // ===================================
166+ SimpleFactory simpleFactory;
167+ Ecs_Expose_Object ( &simpleFactory, " simpleFactory" );
168+
169+ Ecs_Python_Cmd ( " anotherSimple = Simple( simpleFactory.NewSimple( '\\ 'Allo ' ) )" );
170+ Ecs_Python_Cmd ( " print( anotherSimple.GetLastMessage() + '\\ 'Allo!')" );
171+ Ecs_Python_Cmd ( " simpleFactory.DeleteSimple( anotherSimple() )" );
172+
140173 getchar ();
141174
175+
142176 // Finalize EcsPython
143177 // ==================
144178 Ecs_Finalize ();
0 commit comments