How do you write c shell for C ++ class with inheritance

I'm just wondering if there is a way to create a c wrapper API for the C ++ class with inheritance.

Consider the following:

class sampleClass1 : public sampleClass{ public: int get() { return this.data *2; }; void set(int data); } class sampleClass : public sample{ public: int get() { return this.data; } void set(int data) {this.data = data; } } class sample { public: virtual int get(); virtual void set(int data); private: int data; } 

How would I wrap sampleClass1 so that it works in c-context ???

thanks,

+6
source share
1 answer

First, your sample should really get the correct virtual dtor.

Then add only one free function with a C binding for each function that is part of the interface, simply by delegating:

"sample.h"

 #ifdef __cplusplus extern "C" { #endif typedef struct sample sample; sample* sample_create(); sample* sample_create0(); sample* sample_create1(); void sample_destroy(sample*); int sample_get(sample*); void sample_set(sample*, int); #ifdef __cplusplus } #endif 

Sample-c.cpp

 #include "sample.h" // Included first to find errors #include "sample.hpp" // complete the types and get the public interface sample* sample_create() {return new sample;} sample* sample_create0() {return new sampleClass;} sample* sample_create1() {return new sampleClass1;} void sample_destroy(sample* p) {delete p;} int sample_get(sample* p) {return p->get();} void sample_set(sample* p, int x) {p->set(x); 

"sample.hpp"

 // Your C++ header here, with class definition 

"sample.cpp"

 #include "sample.hpp" // Included first to find errors // Implement the class here 
+5
source

Source: https://habr.com/ru/post/977566/


All Articles