J'ai un modèle SoundRecording.h
:Comment convertir des classes créées à l'aide de modèles C++?
template <typename T>
class SoundRecording {
public:
explicit SoundRecording(T init);
private:
T data;
};
template <typename T>
SoundRecording<T>::SoundRecording(T init){
data = init;
}
Et je peux créer des instances de cette classe de modèle comme celui-ci:
SoundRecording<int16_t> recording(INT16_MAX);
Quelle est la meilleure façon de convertir recording
à un SoundRecording<float>
?
Je sais que je pourrais utiliser une méthode simple, par exemple, je pourrais déclarer:
SoundRecording<float> convertInt16ToFloat(SoundRecording<int16_t> input)
Mais je me demandais s'il y avait une façon plus élégante pour y parvenir en utilisant des opérateurs d'affectation ou d'un constructeur.
Mise à jour des commentaires suivants: Je cherche à définir une conversion explicite. Dans l'exemple ci-dessus recording.data
est égal à INT16_MAX
après la construction. Après avoir été converti en float
, il doit être égal à 1.0F
.
Vous ne savez pas actuellement quelles conversions vous voulez être disponibles. Voulez-vous dire que vous voulez que 'SoundRecording' soit convertible en 'SoundRecording ' si 'T' est convertible en' U'? Et voulez-vous des conversions explicites ou implicites, et cela ne devrait-il fonctionner que si 'T' est implicitement convertible en' U'? –
Justin
Cela dépend de ce que vous appelez "élégant". La façon dont vous avez décrit fonctionne; qu'est-ce que vous essayez d'améliorer exactement? – anatolyg
Pour moi, la conversion semble être de la responsabilité de l'objet 'SoundRecording', plutôt que d'une méthode statique distincte. Pas vraiment un fan des méthodes "utilitaires" si je peux les éviter. – donturner