<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1561.4">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 14.0px 'Inconsolata-dz for Powerline'}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 14.0px 'Inconsolata-dz for Powerline'; min-height: 20.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 12.0px; line-height: 17.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #011892}
p.p4 {margin: 0.0px 0.0px 0.0px 24.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #008e00}
p.p5 {margin: 0.0px 0.0px 0.0px 24.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #008e00; min-height: 20.0px}
p.p6 {margin: 0.0px 0.0px 0.0px 12.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #011892; min-height: 20.0px}
p.p7 {margin: 0.0px 0.0px 0.0px 12.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #011892}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px 'Inconsolata-dz for Powerline'; min-height: 20.0px}
p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px 'Inconsolata-dz for Powerline'}
p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #011892; min-height: 20.0px}
p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 13.0px Courier; color: #222222; -webkit-text-stroke: #222222}
p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 13.0px Courier; color: #222222; -webkit-text-stroke: #222222; min-height: 16.0px}
p.p13 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Inconsolata-dz for Powerline'; min-height: 20.0px}
p.p14 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Inconsolata-dz for Powerline'; color: #929292}
span.s1 {font: 14.0px 'Inconsolata-dz for Powerline'; color: #000000; -webkit-text-stroke: 0px #000000}
span.s2 {font-kerning: none}
</style>
</head>
<body>
<p class="p1">On 2018-07-04 18:04:25 +0000, Steven Schveighoffer said:</p>
<p class="p2"><br></p>
<p class="p3">On 7/4/18 1:32 PM, Robert M. Münch wrote:</p>
<p class="p4">I have the following C++ code and want to give the D/C++ integration a new try:</p>
<p class="p5"><br></p>
<p class="p4"> template<typename T> class Array {...}</p>
<p class="p4"> class myClass {...}</p>
<p class="p4"> typedef Array<myClass> myClassArray;</p>
<p class="p4"> myClassArray classA::getArray() noexcept {...}</p>
<p class="p5"><br></p>
<p class="p4">How does the D binding for this look like? I tried something like this:</p>
<p class="p4"> extern (C++) {</p>
<p class="p6"><br></p>
<p class="p7">You need class myClass somewhere, no?</p>
<p class="p8"><br></p>
<p class="p9">Yes, it's the input to an other function:</p>
<p class="p8"><br></p>
<p class="p9"><span class="Apple-converted-space"> </span>extern (C++, myUtils) {</p>
<p class="p9"><span class="Apple-converted-space"> </span>final int readFromFile(Destination dst, Array!myClass input, const char* filename);</p>
<p class="p9"><span class="Apple-converted-space"> </span>}</p>
<p class="p8"><br></p>
<p class="p4"> class Array(T){};</p>
<p class="p4"> class Array(myClass) {};</p>
<p class="p6"><br></p>
<p class="p7">Not sure what this is? ^^</p>
<p class="p8"><br></p>
<p class="p9">Beside the wrong syntax, I was not sure if I need to instantiate the specific template.</p>
<p class="p10"><br></p>
<p class="p7">Note, I would say you need: alias myClassArray = Array!myClass</p>
<p class="p8"><br></p>
<p class="p9">Yes, might help.</p>
<p class="p8"><br></p>
<p class="p4"> class classA {</p>
<p class="p4"> final Array(myClass) getArray(); <== COMPILER ERRORS</p>
<p class="p6"><br></p>
<p class="p7">Array!myClass, not Array(myClass)</p>
<p class="p8"><br></p>
<p class="p9">Ah... this is always catching me... because the declaration syntax is different. Thanks, helped a bit.</p>
<p class="p8"><br></p>
<p class="p11"><span class="s1">This is the C++ signature: </span><span class="s2">public: static class Array<class myClass> __cdecl builtinCodecs(void)</span></p>
<p class="p11"><span class="s2">And this is now the D version: public: class Array<class myClass> __cdecl builtinCodecs(void) __ptr64</span></p>
<p class="p12"><span class="s2"></span><br></p>
<p class="p11"><span class="s2">So, the only difference left is the C++ static and the additional __ptr64 (whatever this is) on the D side. Any further ideas?</span></p>
<p class="p12"><span class="s2"></span><br></p>
<p class="p11"><span class="s2">BTW: IMO the docs should show very complex examples taking classes, typedefs, templates etc. into account and not only show for simple basic types. That's OK to get the concept but this C++ interface thing needs a ton of examples how to do things to be really useable. So, how or where could such a collection be done?</span></p>
<p class="p12"><span class="s2"></span><br></p>
<p class="p13"><br></p>
<p class="p14">--<span class="Apple-converted-space"> </span></p>
<p class="p14">Robert M. Münch</p>
<p class="p14">http://www.saphirion.com</p>
<p class="p14">smarter | better | faster</p>
</body>
</html>