Je vous avez déjà parlé de mes string->template.
J'ai donc un type Value, dont dérive chaque type.
Pour aller vite (et "bien" je pense), j'avais créer un type
template <class T>
class Basetype : public Value {
Basetype( const T& v ) : value( v ) {}
Basetype( ) {}
T value;
};
Deux choses :
* Je voudrais faire des conversions de Basetype<int> vers
Basetype<double> par exemple. Comment est ce que vous me conseillez de
m'y prendre ? Et peut être même d'une Value à une autre, mais ce serait
pour plus tard.
* Je voudrais (dans la succession du premier cas) avoir des opérateurs
du genre Value+Value, les deux Values pouvant entre de type différent.
Je compte me baser sur les opérateurs qui existe déjà :
Basetype<int>+Basetype<double> (retourne un Basetype<double> ?) ou
Basetype<double>*Basetype<Vector2D> (operation scalaire, Vector2D etant
une classe du programme).
Est ce qu'il y a un moyen (simple) de faire des conversions (implicites)
avec ces templates ?
Enfin, (et on revient sur une discussion de cette semaine sur les
membres statics) j'aurais voulu stocker pour chacun de ses types une
string static. Et enregistrer en même temps dans une map...
J'avais pensé à Basetype<double>::init( "double" ) pour faire les deux
d'un seul coup :
static void Basetype::init( const std::string& s ) {
type_name = s;
creators[s] = &create; // static void Basetype::create() ...
}
Mais ca marche pas : type_name n'est pas instanciée. Il faut que je me
tape "string Basetype<...> ;" pour chaque type ? (redondance à mon gout)
Merci.
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Thierry Miceli
* Je voudrais faire des conversions de Basetype<int> vers Basetype<double> par exemple. Comment est ce que vous me conseillez de m'y prendre ? Et peut être même d'une Value à une autre, mais ce serait pour plus tard.
Ajoute le membre suivant à Basetype: template <class U> operator U() { return value; }
Tu pourras écrire alors: Basetype<int> a; Basetype<double> b; b = a;
Toutes les conversions d'un Basetype<typeA> vers Basetype<typeB> sont ainsi possibles à condition qu'il y ait déjà des conversion de type implicites de typeA vers typeB.
Thierry
* Je voudrais faire des conversions de Basetype<int> vers
Basetype<double> par exemple. Comment est ce que vous me conseillez de
m'y prendre ? Et peut être même d'une Value à une autre, mais ce serait
pour plus tard.
Ajoute le membre suivant à Basetype:
template <class U> operator U() { return value; }
Tu pourras écrire alors:
Basetype<int> a;
Basetype<double> b;
b = a;
Toutes les conversions d'un Basetype<typeA> vers Basetype<typeB> sont ainsi
possibles à condition qu'il y ait déjà des conversion de type implicites de
typeA vers typeB.
* Je voudrais faire des conversions de Basetype<int> vers Basetype<double> par exemple. Comment est ce que vous me conseillez de m'y prendre ? Et peut être même d'une Value à une autre, mais ce serait pour plus tard.
Ajoute le membre suivant à Basetype: template <class U> operator U() { return value; }
Tu pourras écrire alors: Basetype<int> a; Basetype<double> b; b = a;
Toutes les conversions d'un Basetype<typeA> vers Basetype<typeB> sont ainsi possibles à condition qu'il y ait déjà des conversion de type implicites de typeA vers typeB.