comment surcharger les paramètres d'une methode virtual
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 :
Code:
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){};
}; |
et j'ai également une classe C_Plane :
Code:
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);
}; |
Pour finir j'ai un MeshManager :
Code:
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();
}; |
lorsque je compile tous se passe bien mais lorsque j'exécute le programme cela m'indique :
Citation:
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
voici l'utilisation :
Code:
1 2 3 4
|
float size[] = { 5.0f, 5.0f };
int subPlane[] = { 0, 0 };
m_testMesh = MeshManager.Create<TMeshType::MESH_PLANE>("testPlane", size, subPlane); |
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.
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.