Bonjour,
Je suis confronter sur un problème depuis maintenant une semaine et j'ai bo chercher sur internet je n'arrive pas à trouver une solution de mon problème.
Mon Problème se situe sur la surcharge du nombre de paramètre d'une fonction.
J'ai une classe C_Mesh :
et j'ai également une classe C_Plane :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class SILVERENGINE_API C_Mesh{ public: // ... autre méthodes de la classe virtual C_Mesh* GetThisPtr() { return this; } virtual void Create(C_Mesh& p_mesh){}; };
Pour finir j'ai un MeshManager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class SILVERENGINE_API C_Plane{ public: // ... autre méthodes de la classe virtual C_Plane* GetThisPtr() { return this; } virtual void Create(C_Mesh& p_mesh, float[] p_size, int[] p_nbSubPlane); };
lorsque je compile tous se passe bien mais lorsque j'exécute le programme cela m'indique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 /** * \class C_MeshManager * \extends C_Singleton<C_MeshManager> */ class SILVERENGINE_API C_MeshManager : public C_Singleton <C_MeshManager>{ MAKE_SINGLETON(C_MeshManager) /** * \publicsection */ public: template<TMeshType p_type, typename ... Args> C_Mesh* Create(std::string const& p_name, Args&& ... p_args){ C_Mesh* newMesh; auto meshCreate = MeshFactory.Create(p_type)->GetThisPtr(); // <-- meshCreate = C_Plane* pour le test meshCreate->Create(newMesh, p_args); return newMesh; } /** * \privatesection */ private: C_MeshManager(); ~C_MeshManager(); };
voici l'utilisation :Erreur 4 error C2660: 'SilverEngine::C_Mesh::Create'*: la fonction ne prend pas 3 arguments c:\users\ksta\desktop\dll\sources\silverengine\core\c_meshmanager.h 47 1 TestDLL
Se que j'aimerais c'est obliger l'utilisateur à redéfinir la fonction Create dans les sous class de Mesh et si possible rajouter des arguments.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 float size[] = { 5.0f, 5.0f }; int subPlane[] = { 0, 0 }; m_testMesh = MeshManager.Create<TMeshType::MESH_PLANE>("testPlane", size, subPlane);
J'ai essayer de pas les mettre virtual, de définir using C_Mesh::Create; devant la fonction de C_Plane mais aucun résultat imposible d'exécuter.
Si quelqu'un aurai une solution je le remercie d'avance.
Partager