cast const Classe à l'aide de dynamic_cast
Je veux lancer ce:
class Base
{
public:
virtual ~Base(){};
};
class Der : public Base {};
int main()
{
const Base* base = new Der;
Der* der = dynamic_cast<Der*>(base); //Error
return 0;
}
Que dois-je faire?
J'ai essayé de mettre: const Der* der = dynamic_cast<Der*>(base);
à mantain const mais cela ne fonctionne pas.
OriginalL'auteur okami | 2010-08-31
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
dynamic_cast
n'a pas la possibilité de supprimer unconst
qualificatif. Vous pouvez lancer loinconst
séparément à l'aide d'unconst_cast
, mais c'est généralement une mauvaise idée dans la plupart des situations. D'ailleurs, si vous vous surprenez à l'aide dedynamic_cast
, il est généralement un signe qu'il ya une meilleure façon de faire ce que vous essayez de faire. Il n'est pas toujours faux, mais pensez à cela comme un signe que vous sont en train de faire des choses à la dure.Vous avez besoin de la const deux fois - une fois dans le type de la variable qui est affecté, et une fois dans la
dynamic_cast
. Dans l'exemple de ce que vous avez essayé, vous n'avez eu que le premier.ok. Mais juste une quesiton en vertu de ma question. Pourquoi devrais-je garder virtual ~Base(){}; dynamic_cast ne me donne pas une erreur?
Vous pourriez le remplacer par toute fonction virtuelle, à condition que vous n'avez pas vraiment besoin d'un destructeur virtuel. Voir ceci: publib.boulder.ibm.com/infocenter/compbgpl/v9v111/... "L'opérateur dynamic_cast utilise le runtime type d'informations générées à partir des polymorphes de classes". Aussi, si vous devez garder le destructeur virtuel: parashift.com/c++-faq-lite/virtual-fonctions.html#faq-20.7
OriginalL'auteur Eclipse
tandis que les deux moulages de travail, le second doit être évitée.
OriginalL'auteur Taran9