Cheng Wei , dans le message (digitalmars.D.learn:29865), a écrit :
Thanks a lot. This solves the problem.
However, it breaks the abstractness. Now in D side, we can call
auto v = ab(). This does not make sense, because then v cannot be used
in the C library.
I don't understand why when we
what is the error message ?
Am 29.09.2011, 06:51 Uhr, schrieb Cheng Wei riverch...@gmail.com:
extern(C) {
struct ab;
}
ab*[int] map;
void main() {
map.clear();
}
Cannot be compiled. Why?
Thanks.
Just use void* for opaque pointers in D.
On 09/29/2011 01:28 PM, Trass3r wrote:
Am 29.09.2011, 06:51 Uhr, schrieb Cheng Wei riverch...@gmail.com:
extern(C) {
struct ab;
}
ab*[int] map;
void main() {
map.clear();
}
Cannot be compiled. Why?
Thanks.
Just use void* for opaque pointers in D.
Or an empty struct.
struct ab{}
The problem is that the void* cannot convert back to AB* when we want to
use it in c library.
Just don't understand why the cast(AB*)p (p is void *) needs to know the
size of AB. Is there any unsafe cast which can blindly cast the
pointers?
Thanks a lot. This solves the problem.
However, it breaks the abstractness. Now in D side, we can call
auto v = ab(). This does not make sense, because then v cannot be used
in the C library.
I don't understand why when we manipulate AB*, D compiler needs to know
the size of struct ab. Moreover,
Cheng Wei:
extern(C) {
struct ab;
}
ab*[int] map;
void main() {
map.clear();
}
Cannot be compiled. Why?
It's not specific of associative arrays:
extern(C) {
struct AB;
}
AB*[] arr;
void main() {
arr.length += 1;
}
Bye,
bearophile