interfacing cpp
Salih Dincer
salihdb at hotmail.com
Tue Oct 22 11:13:20 UTC 2024
On Tuesday, 22 October 2024 at 10:50:22 UTC, f wrote:
> std.cpp
> --
> ```c
> #include \<vector>
> #include \<iostream>
> #include \<string>
>
> using namespace std;
> void a(string a)
> {
> cout\<\<" hello " \<\<a\<\<endl;
> }
>
> s.d
> --
> ```d
> module s;
>
> import core.stdcpp.string;
>
> extern(C++)
> {
> final void a(basic_string!char a);
> }
>
> main.d
> --
> void main()
> {
> import s;
> import core.stdcpp.string;
> auto i=basic_string!char("hello");
> a(i);
> }
> ```
> i've read the interfacing cpp on documentation,
> ok then the compiler mesasge for this
>
> libstdc++ std::__cxx11::basic_string is not yet supported; the
> struct contains an interior pointer which breaks D move
> semantics!
>
> but with options AA="-D_GLIBCXX_USECXX11_ABI=0" on g++ ,
> and BB="-version=_GLIBCXX_USE_CXX98_ABI" on dmd the message is :
>
> Error: undefined reference to `a(std::string)`
>
> how to solve the, std:string , std:vector, std:optional ?
>
> is there any article / links on general interfacing c++ problem
> solving ?
>
> thanks
In C++, template classes and some STL constructs (e.g.
std::basic_string) cannot be directly transferred to D because
the compile-time mechanisms for templates in C++ are different
from D.
SDB at 79
More information about the Digitalmars-d-learn
mailing list