consideran un simple clase de ejemplo:Envolver objeto de C++ en extern "C"
class BankAccount {
public:
BankAccount() { balance =0.0; };
~BankAccount() {};
void deposit(double amount) {
balance += amount;
}
private:
double balance;
};
Ahora digo que quiero terminar con esto en extern "C", por lo que se puede llamar de muchas diferentes lenguajes de programación como C# y Java. Probé la continuación de lo cual parecía funcionar:
// 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);
}
Es este portátil? ¿El tipo sin signo "sin signo largo" es lo suficientemente grande para un puntero de objeto? ¿Algún otro problema con este enfoque?
¡Gracias de antemano por cualquier respuesta!
¿Cómo van a acceder esos otros idiomas a 'BankAccount' si no tienen la definición de clase? –
@Etienne, a través del puntero (emitido como un largo) y las funciones C. Una C-API para una biblioteca C++, supongo. – Skurmedel
@Skudermel Hmm, sí, eso tiene sentido. –