| Thread overview | |||||
|---|---|---|---|---|---|
|
April 01, 2008 Idea: Extern C++ Classes | ||||
|---|---|---|---|---|
| ||||
The C++ compatibility provided in D 2.0 is a huge step forward. However, if my understanding is correct, the biggest limitation with it is that D's classes are not ABI compatible with C++ classes. This means that non-static member functions can't be called between D and C++. To remedy this issue, I propose that we allow extern C++ declarations on classes. This would mean that the class behaves like a C++ class (doesn't inherit Object, no GC by default, only polymorphic if it contains virtual functions, etc.) I realize this may require a moderate amount of Walter's time. I therefore would propose this as perhaps a D 3.0 feature. What issues would arise that I am forgetting to address? Does anyone have a better solution for this? -Craig | ||||
April 01, 2008 Re: Idea: Extern C++ Classes | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Craig Black | Craig Black wrote:
> The C++ compatibility provided in D 2.0 is a huge step forward. However, if my understanding is correct, the biggest limitation with it is that D's classes are not ABI compatible with C++ classes. This means that non-static member functions can't be called between D and C++.
>
> To remedy this issue, I propose that we allow extern C++ declarations on classes. This would mean that the class behaves like a C++ class (doesn't inherit Object, no GC by default, only polymorphic if it contains virtual functions, etc.)
>
> I realize this may require a moderate amount of Walter's time. I therefore would propose this as perhaps a D 3.0 feature.
>
> What issues would arise that I am forgetting to address? Does anyone have a better solution for this?
You can already call C++ member functions declared with extern(C++). The problems, however, stem from C++ constructors, destructors, and special functions.
| |||
April 01, 2008 Re: Idea: Extern C++ Classes | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | "Walter Bright" <newshound1@digitalmars.com> wrote in message news:fssh36$8sl$1@digitalmars.com... > Craig Black wrote: >> The C++ compatibility provided in D 2.0 is a huge step forward. However, if my understanding is correct, the biggest limitation with it is that D's classes are not ABI compatible with C++ classes. This means that non-static member functions can't be called between D and C++. >> >> To remedy this issue, I propose that we allow extern C++ declarations on classes. This would mean that the class behaves like a C++ class (doesn't inherit Object, no GC by default, only polymorphic if it contains virtual functions, etc.) >> >> I realize this may require a moderate amount of Walter's time. I therefore would propose this as perhaps a D 3.0 feature. >> >> What issues would arise that I am forgetting to address? Does anyone have a better solution for this? > > You can already call C++ member functions declared with extern(C++). The problems, however, stem from C++ constructors, destructors, and special functions. But that only works for virtual functions declared using interfaces, right? That is somewhat limiting. It would be nice to take it a step further. -Craig | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply