小编And*_*.P.的帖子

在extern"C"中包装C++对象

考虑一个简单的示例类:

class BankAccount {
public:
   BankAccount() { balance =0.0; };
  ~BankAccount() {};
   void deposit(double amount) {
      balance += amount;
   }
   private:
      double balance;
};
Run Code Online (Sandbox Code Playgroud)

现在说我想将它包装在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);
} 
Run Code Online (Sandbox Code Playgroud)

这是便携式吗?类型无符号"unsigned long"是否足够大以容纳对象指针?这种方法还有其他问题吗?

提前感谢您的任何答案!

c c++ cross-platform

7
推荐指数
3
解决办法
509
查看次数

标签 统计

c ×1

c++ ×1

cross-platform ×1