The following C++ code shows how exchange rates and tables, exchange objects and groups, and the exchange factory come together to perform a currency exchange. The comments in the code detail each part of the program.
#include <rw/money/money.h> #include <rw/money/euroexchggrp.h> #include <rw/money/divexchggrp.h> #include <rw/money/exchgfact.h> . . . // Create and initialize an exchange rate table // to be used for all currency conversions. RWExchangeRateTable rateTable; . . . // Create an exchange factory that uses the exchange rate // table created above. By default the exchange factory contains // the multiplication exchange group. RWExchangeFactory<double> exchangeFactory( rateTable ); // Add a Euro exchange group ifstream euroCurrenciesFile( "euro_currencies.in" ); RWExchangeGroup<double> euroGroup = RWEuroGroup<double>::create( euroCurrenciesFile ); exchangeFactory.appendExchangeGroup( euroGroup ); // Add a division exchange group RWExchangeGroup<double> divGroup = RWDivisionGroup<double>::create(); exchangeFactory.appendExchangeGroup( divGroup ); // The exchange factory contains three exchange groups: // an RWMultiplicationGroup, an RWEuroGroup, and an // RWDivisionGroup, in that order. // Get an exchange object from the factory for converting Belgian // Francs to Canadian Dollars. Since the factory's exchange rate // table contains a conversion factor for converting Belgian Francs // to Canadian Dollars, it creates an exchange object containing // an RWMultiplicationExchange implementation. Exchanges will be // computed by multiplying the source amount by the conversion // conversion factor. RWExchange<double> befToCadExchanger = exchangeFactory.getExchange( "BEF", "CAD" ); // Get an exchange object from the factory for converting Belgian // Francs to French Francs. The factory's exchange rate table does // not contain a conversion factor for converting Belgian Francs to // French Francs. Belgium and France are members of the EMU, so // instead, the exchange rate table contains conversion factors for // converting Euros to Belgian Francs and Euros to French Francs. // This means that the Factory creates an RWExchange object with an // RWTriangularExchange implementation. RWExchange<double> befToFrfExchanger = exchangeFactory.getExchange( "BEF", "FRF" ); // Get an exchange object from the factory for converting Belgian // Francs to Euros. The factory's exchange rate table does not // contain a conversion factor for converting Belgian Francs to // Euros and the Euro is not a local Euro currency. There is, // however, a conversion factor for converting Euros to Belgian // Francs in the factory's exchange rate table. Thus the last // exchange group in the list, RWDivisionGroup, creates an exchange // object with an RWDivisionExchange implementation. RWExchange<double> befToEURExchanger = exchangeFactory.getExchange( "BEF", "EUR" ); // Do the exchanges, using the exchange function of each exchange // object. RWMoney<double> moneyBEF( 189972.76, "BEF" ); if ( befToCadExchanger.isValid() ) { RWMoney<double> moneyCAD = befToCadExchanger.exchange(moneyBEF); } if ( befToFrfExchanger.isValid() ) { RWMoney<double> moneyFRF = befToFrfExchanger.exchange(moneyBEF); } if ( befToEURExchanger.isValid() ) { RWMoney<double> moneyEUR = befToEURExchanger.exchange(moneyBEF); }
©Copyright 1999, Rogue Wave Software, Inc.
Contact Rogue Wave about documentation or support issues.