Обертывание объекта C ++ во внешнем «C»

рассмотрим простой пример класса:

class BankAccount {
public:
   BankAccount() { balance =0.0; };
  ~BankAccount() {};
   void deposit(double amount) {
      balance += amount;
   }
   private:
      double balance;
};

Теперь предположим, что я хочу обернуть это в extern «C», чтобы я мог вызывать его из многих различных языков программирования, таких как C # и Java. Я попробовал следующее, которое, похоже, сработало:

// cbankAccount.h:
extern "C" unsigned long createBackAccount(); 
extern "C" void deposit(unsigned long bankAccount, double amount);
// cbankAccount.cpp
unsigned long createBackAccount() {
  BankAccount *b = new BankAccount();
  return (unsigned long) b;
}
void deposit(unsigned long bankAccount, double amount) {
  BankAccount *b = (BankAccount*) bankAccount;
  b->deposit(amount);
} 

Это портативное устройство? Достаточно ли велик тип unsigned "unsigned long" для указателя на объект? Есть ли другие проблемы с этим подходом?

Заранее благодарим за любые ответы!

7
задан Andreas W.P. 27 May 2011 в 13:39
поделиться