J'ai une classe BinaryMemoryReader
qui a une fonction définie comme ceci:Surcharger une fonction avec une fonction d'une autre classe
template <typename T>
inline void read(T **data) {
*data = (T*)&stream[position];
position += sizeof(T);
}
Il gère la plupart des types standard d'un flux en mémoire.
Les types personnalisés complexes ont lu les fonctions de leur propre, telles que:
void AnotherClass::read(BinaryMemoryReader *const reader)
{
reader->read<bool>(&num);
reader->read<short>(&count);
}
Ce que je voudrais écrire est le code qui, quand j'écris
reader->read<AnotherClass>(&var);
appelleraient la deuxième fonction. Cela signifierait que la fonction de lecture de AnotherClass
surchargerait la fonction de lecture BinaryMemoryReader
pour ce type particulier.
Cela me permettrait d'écrire un code beaucoup plus propre.
EDIT: L'idée générale est la suivante:
- ont une classe
BinaryMemoryReader
centrale. - Avoir une fonction de lecture générique pour gérer les types standard.
- Avoir la syntaxe pour l'appeler soit
bmr->read<int>(&intVar);
- Avoir des fonctions de lecture spécialisées définies dans leurs propres classes.
- Plus important encore, la syntaxe de les appeler serait
bmr->read<customType>(&customTypeVar);
De cette façon, les fonctions de lecture spécifiques seraient associés à leurs propres classes, mais aurait pu être appelé à partir du BinaryMemoryReader
.
Google "Spécialisation de modèle C++". – LogicStuff
Notez que chacune des fonctions de lecteur supplémentaires sont définies dans leurs propres classes, et non dans 'BinaryMemoryReader'. – Karlovsky120
Pourquoi ne pas créer une fonction de modèle libre, qui prend un paramètre 'BinaryMemoryReader' et un' T'? Celui-ci pourrait être facilement spécialisé dans n'importe quel autre module de classe. – user0042