C'est assez bizarre comme manière de faire, normalement on fait plutôt des liens dynamiques avec du virtual et tout le bastringue si on a une instance de la classe mère pour retomber sur la bonne classe fille.
Quoi qu'il en soit si tu peux déterminer la classe à partir d'une valeur stockée dans un chaine tu peux t'en sortir avec un dynamic_cast ou un static_cast.
#include <iostream>
#include <string>
#include <cassert>
class a_t{
protected:
std::string machaine;
public:
a_t(const std::string & machaine0="b1"):
machaine(machaine0)
{
assert(machaine=="b1" || machaine=="b2");
}
inline const std::string & get_machaine() const{
return machaine;
}
};
class b1_t : public class a_t{
public:
b1_t(){}
inline void f() const {
std::cout << "b1" << std::endl;
}
};
class b2_t : public class a_t{
public:
b2_t(){}
inline void f() const {
std::cout << "b2" << std::endl;
}
};
void mafonction(a_t & x){
if(x.get_machaine() == "b1"){
const b1_t & x_cast = std::static_cast<b1_t>(x);
x_cast.f();
}else if(x.get_machaine() == "b1"){
const b2_t & x_cast = std::static_cast<b2_t>(x);
x_cast.f();
}
}
Bone j'ai pas testé mais je pense que ça doit marcher, ou quelque chose dans ce goût là, je te laisser chercher...
Bonne chance


