<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte 2 unterschiedliche Bibliotheken verwenden in meinem Algorithmus. Ich will aber sauber bleiben und möglichst vielleicht nur eine schnittstelle aus dem Algorithmus anbieten. Das Problem ist dass beide unterschiedliche Parameter brauchen. Ich will aber keinesfalls den code duplizieren.</p>
<p>Darf/Sollte die Signatur eine vereinigung aller parameter sein und in den unterschiedlichen funktionen dann einige parameter einfach nicht verwendet werden?</p>
<p>Und wohin schreibt man so Aufrufe der Class::Bib_Call() ? Wie macht ihr das?</p>
<p>Ginge vielleicht irgendwie sowas?</p>
<pre><code class="language-cpp">//...irgendwo im Algorithmus
A = Bib_Call(a,b,c,d);
</code></pre>
<pre><code class="language-cpp">//da wo die Bib-Funktionen separat aufgerufen werden - wo sollte dies sein?
int Class::Bib_Call(int a, double b, char c, int* d)
{
     return lib_call_bib1(a,c);
}

//und da wo die andere lib ist
int Class2::Bib_Call(int a, double b, char c, int* d)
{
    return lib_call_bib2(b,d);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/240577/untersch-bib-aufrufe-gt-wie-sauber-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 22:41:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240577.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 May 2009 12:14:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 12:14:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte 2 unterschiedliche Bibliotheken verwenden in meinem Algorithmus. Ich will aber sauber bleiben und möglichst vielleicht nur eine schnittstelle aus dem Algorithmus anbieten. Das Problem ist dass beide unterschiedliche Parameter brauchen. Ich will aber keinesfalls den code duplizieren.</p>
<p>Darf/Sollte die Signatur eine vereinigung aller parameter sein und in den unterschiedlichen funktionen dann einige parameter einfach nicht verwendet werden?</p>
<p>Und wohin schreibt man so Aufrufe der Class::Bib_Call() ? Wie macht ihr das?</p>
<p>Ginge vielleicht irgendwie sowas?</p>
<pre><code class="language-cpp">//...irgendwo im Algorithmus
A = Bib_Call(a,b,c,d);
</code></pre>
<pre><code class="language-cpp">//da wo die Bib-Funktionen separat aufgerufen werden - wo sollte dies sein?
int Class::Bib_Call(int a, double b, char c, int* d)
{
     return lib_call_bib1(a,c);
}

//und da wo die andere lib ist
int Class2::Bib_Call(int a, double b, char c, int* d)
{
    return lib_call_bib2(b,d);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1707732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707732</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 08 May 2009 12:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 12:18:08 GMT]]></title><description><![CDATA[<p>Das kann man so abstrakt nicht sagen, weils Situationsabhängig ist. Meistens ists aber nicht unbedingt sinnvoll, überflüssige Parameter zu haben. Gib uns mal das konkrete Problem, vor dem du stehst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707735</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 May 2009 12:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 12:27:03 GMT]]></title><description><![CDATA[<p>naja ist ein wenig schwierig weil ich ja eben dabei bin das Problem umzusetzen.</p>
<blockquote>
<p>Das kann man so abstrakt nicht sagen, weils Situationsabhängig ist.</p>
</blockquote>
<p>ich versteh leider nicht genau warum das situationsabhängig ist.</p>
<p>Ich versuche vielleicht ein anderes konkretes Beispiel:</p>
<p>Angenommen ich habe eine Matrix und einen Vektor in separaten Arrays:</p>
<pre><code class="language-cpp">int** matrix;
int* vec;
</code></pre>
<p>Und ich will jetzt eine Matrix-Vektor-Multiplikation ausführen. Ich habe 2 Bibliotheken (bib1, bib2) und beide implementieren diese Multiplikation anders.<br />
Je nach input-flag will ich jetzt entweder die Multiplikation über bib1 und eben über bib2.<br />
Da ich aber mehrere solche Aufrufe habe dachte ich eine Regelung über if-Abfragen im Haupt-code ist unsauber bzw. nicht gerade übersichtlich.</p>
<p>Deswegen wollte ich eine gemeinsame Schnittstelle haben über Class::Bib_Call().<br />
Vielleicht ist das Blödsinn keine Ahnung.<br />
Aber angenommen es käme mal eine dritte Bib hinzu - da jetzt jede if-abfrage zu erweitern ist doch nicht gerade sinnvoller weg oder?</p>
<p>Besser verständlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707740</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 08 May 2009 12:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 12:41:38 GMT]]></title><description><![CDATA[<p>bei deinem matrix-vector Beispiel sehe ich nicht wie da die bibcalls mit verschiedenen parametern zustande kommen sollen. Das Beispiel würde ich wie folgt lösen:</p>
<p>- Schaffe eine abstrakte Basisklasse die die Routinen deklariert die du brauchst, und zwar für die Klassen die du geschrieben hast.</p>
<pre><code class="language-cpp">struct AbstractMatrixMultiplicator
{
  MyMatrix multiply(MyMatrix const&amp; lhs, MyVector const&amp; rhs) = 0;
};
</code></pre>
<p>- Für die verschiedenen Libs die zum Einsatz kommen könnten, definierst du jeweils eine Klasse, die von der abstrakten klasse ableitet und die Routinen implementiert, und zwar so, dass sie die von dir definierten Klassen übersetzen in das, was die Bibliotheken eben grade brauchen, dann die Bibliothek aufrufen, und am Ende das von der Bibliothek gelieferte Ergebnis wieder zurückübersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707748</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 May 2009 12:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 13:19:08 GMT]]></title><description><![CDATA[<p>hmm...und wie instantiiere ich dann abhängig von einem flag das ich dem programm übergebe?</p>
<p>müssen die methoden in der basisklasse nicht virtual sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707773</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 08 May 2009 13:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 13:55:29 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<p>hmm...und wie instantiiere ich dann abhängig von einem flag das ich dem programm übergebe?</p>
</blockquote>
<p>Über eine Fabrik oder Fabrikmethode:</p>
<pre><code class="language-cpp">enum Lib{ XYZLib, ABCLib }

AbstractMatrixMultiplicator* getMatrixMultiplicator(Lib lib)
{
  switch (lib)
  {
    case XYZLib: return new XYZMatrixMultiplicator;
    case ABCLib: return new ABCMatrixMultiplicator;
    default: throw UnknownLibraryException;
  }
}
</code></pre>
<p>gogle mal nach factory pattern und factory method pattern. Oder besorg dir das GOF-Buch, ist eigentlich ein Muss für jeden der etwas mehr als nur &quot;hello world!&quot; schreiben möchte:<br />
<a href="https://duckduckgo.com/?q=isbn+3827328241&amp;cppnetbooks" rel="nofollow">Entwurfsmuster | ISBN: 3827328241</a></p>
<blockquote>
<p>müssen die methoden in der basisklasse nicht virtual sein?</p>
</blockquote>
<p>Ja sorry, natürlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707802</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 May 2009 13:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 15:03:28 GMT]]></title><description><![CDATA[<p>erstmal danke</p>
<blockquote>
<p>und zwar so, dass sie die von dir definierten Klassen übersetzen in das, was die Bibliotheken eben grade brauchen,</p>
</blockquote>
<p>hmm...aber wie soll das gehen? Abstrakte Methode und Implementierung in den jeweiligen Klassen müssen doch dieselbe signatur haben...wie meinst Du das? Kleines Beispiel? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707827</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 08 May 2009 15:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Untersch. Bib-Aufrufe -&amp;gt; Wie sauber schreiben? on Fri, 08 May 2009 17:12:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">MyMatrix XYZMatrixManipulator::multiply(MyMatrix const&amp; lhs, MyVector const&amp; rhs)
{
  XYZMatrix xm = konvertToXYZMatrix(lhs);
  XYZVector xv = konvertToXYZVector(rhs);
  XYZMatrix xm2 = XYZLib::math::irgendeineMultiplikationsFunktion(xm, xv);
  MyMatrix mm = konvertFROMXYZMatrix(xm2);
  return mm;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1707886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707886</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 May 2009 17:12:21 GMT</pubDate></item></channel></rss>