Utilisation d’une fonction de conversion (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Conversion de mesures (C++)

Dans les cas où la conversion est plus complexe, vous pouvez utiliser une syntaxe différente et spécifier une fonction qui effectue la conversion au lieu d'utiliser un facteur de conversion. Par exemple, vous ne pouvez pas convertir des valeurs de température à l'aide d'un facteur de conversion, puisque les échelles de température ont des origines différentes.

Cet exemple, qui est traduit à partir de l'unité StdConvs, montre comment recenser un type de conversion en fournissant des fonctions de conversion à partir et à destination des unités de base.

Déclarer les variables

D’abord, vous devez déclarer des variables pour les identificateurs. Les identificateurs sont utilisés dans la famille de conversion cbTemperature et les unités de mesure sont ses membres :

 TConvFamily cbTemperature;
 TConvType tuCelsius;
 TConvType tuKelvin;
 TConvType tuFahrenheit;

Remarque : Les unités de mesure listées ici sont un sous-ensemble des unités de température réellement recensées dans l'unité StdConvs.

Recenser la famille de conversion

Ensuite, recensez la famille de conversion :

 cbTemperature = RegisterConversionFamily("Temperature");

Recenser l'unité de base

Ensuite, définissez et recensez l'unité de base de la famille de conversion (dans l'exemple, le degré Celsius). Notez que dans le cas de l'unité de base, nous pouvons utiliser un facteur de conversion simple, car il n'y a pas de conversion réelle à effectuer :

 tuCelsius = RegisterConversionType(cbTemperature, "Celsius", 1);

Ecrire les méthodes de conversion vers et depuis l'unité de base

Vous devez écrire le code qui effectue la conversion de chaque échelle de température, vers ou depuis les degrés Celsius, car celles-ci ne dépendent pas d'un facteur de conversion simple. Ces fonctions sont traduites à partir de l'unité StdConvs :

 double __fastcall FahrenheitToCelsius(const double AValue) {
     return (((AValue - 32) * 5) / 9);
 }
 
 double __fastcall CelsiusToFahrenheit(const double AValue) {
     return (((AValue * 9) / 5) + 32);
 }
 
 double __fastcall KelvinToCelsius(const double AValue) {
     return (AValue - 273.15);
 }
 
 double __fastcall CelsiusToKelvin(const double AValue) {
     return (AValue + 273.15);
 }

Recenser les autres unités

Maintenant que vous disposez des fonctions de conversion, vous pouvez recenser les autres unités de mesure au sein de la famille de conversion. Vous incluez aussi la description des unités.

Le code de recensement des autres unités de la famille est le suivant :

 tuKelvin = RegisterConversionType(cbTemperature, "Kelvin", KelvinToCelsius,
 		CelsiusToKelvin);
 tuFahrenheit = RegisterConversionType(cbTemperature, "Fahrenheit",
 		FahrenheitToCelsius, CelsiusToFahrenheit);

Utiliser les nouvelles unités

Vous pouvez maintenant utiliser les unités que vous venez de recenser pour effectuer des conversions dans vos applications. La fonction Convert globale peut effectuer la conversion entre tous les types de conversion que vous avez recensés avec la famille de conversion cbTemperature. Par exemple, le code suivant convertit en degrés Kelvin une valeur exprimée en degrés Fahrenheit.

 Convert(StrToFloat(Edit1->Text), tuFahrenheit, tuKelvin);

Voir aussi