The following 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/currency/money.h> #include <rw/currency/euroexchggrp.h> #include <rw/currency/divexchggrp.h> #include <rw/currency/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.txt" ); 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: // RWMultiplicationGroup, RWEuroGroup, and 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 are // 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 © Rogue Wave Software, Inc. All Rights Reserved.
The Rogue Wave name and logo, and SourcePro, are registered trademarks of Rogue Wave Software. All other trademarks are the property of their respective owners.
Provide feedback to Rogue Wave about its documentation.