<?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[2 Bibliotheken: Virtuelle Basisklasse oder wie?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte für meine mathematischen funktionen 2 unterschiedliche Bibliotheken benutzen. Also im code einfach je nach input flag 2 verschiedene lib-funktionen aufrufen lassen.<br />
Ich frage mich nach einer sinnvollen vorgehensweise. Wäre hier Laufzeitpolymorphie sinnvoll? Was gäbe es denn noch für Möglichkeiten?</p>
<p>Kurzes Pseudo-code beispiel:</p>
<pre><code class="language-cpp">class MyClass
{
   public: 

        void foo(int lib) 
        {
            if (lib == 0)
                 use_lib1_foo();
            else
                 use_lib2_foo();
        }
};

int main(void)
{

     MyClass myclass;
     myclass.foo(1);

}
</code></pre>
<p>Es ist nämlich so das die libs unterschiedliche signaturen haben.<br />
Wenn ich jetzt eine abstrakte basisklasse habe muss ich doch eine vereinigungsmenge aller argumente beider calls in den methodenrumpf übergeben oder? Also sozusagen dummy-argumente.<br />
Wie geht man da vor?</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class MyClassBase 
{
      public:
          virtual void foo(int a, double b) = 0;
};

class MyClassLib1 : public MyClassBase
{
   public: 

         void foo (int a, doulbe b)
        {
                 use_lib1_foo(a,b);
        }
};
class MyClassLib2 : public MyClassBase
{
   public: 

         void foo (int a, double b) // hier ist b dummy argument?????
        {
                 use_lib2_foo(a);
        }
};
int main(void)
{
      int lib = -1;
     //lib wird vorher gesetzt

     MyClassBase* myclassBase = NULL;
     if (lib == 0) myclassBase = new MyClassLib1;
     else myclassBase = new MyClassLib2;
     myclassbase.foo(2,3.0);

}
</code></pre>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257352/2-bibliotheken-virtuelle-basisklasse-oder-wie</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 11:11:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257352.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Dec 2009 11:24:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Sun, 27 Dec 2009 11:33:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte für meine mathematischen funktionen 2 unterschiedliche Bibliotheken benutzen. Also im code einfach je nach input flag 2 verschiedene lib-funktionen aufrufen lassen.<br />
Ich frage mich nach einer sinnvollen vorgehensweise. Wäre hier Laufzeitpolymorphie sinnvoll? Was gäbe es denn noch für Möglichkeiten?</p>
<p>Kurzes Pseudo-code beispiel:</p>
<pre><code class="language-cpp">class MyClass
{
   public: 

        void foo(int lib) 
        {
            if (lib == 0)
                 use_lib1_foo();
            else
                 use_lib2_foo();
        }
};

int main(void)
{

     MyClass myclass;
     myclass.foo(1);

}
</code></pre>
<p>Es ist nämlich so das die libs unterschiedliche signaturen haben.<br />
Wenn ich jetzt eine abstrakte basisklasse habe muss ich doch eine vereinigungsmenge aller argumente beider calls in den methodenrumpf übergeben oder? Also sozusagen dummy-argumente.<br />
Wie geht man da vor?</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class MyClassBase 
{
      public:
          virtual void foo(int a, double b) = 0;
};

class MyClassLib1 : public MyClassBase
{
   public: 

         void foo (int a, doulbe b)
        {
                 use_lib1_foo(a,b);
        }
};
class MyClassLib2 : public MyClassBase
{
   public: 

         void foo (int a, double b) // hier ist b dummy argument?????
        {
                 use_lib2_foo(a);
        }
};
int main(void)
{
      int lib = -1;
     //lib wird vorher gesetzt

     MyClassBase* myclassBase = NULL;
     if (lib == 0) myclassBase = new MyClassLib1;
     else myclassBase = new MyClassLib2;
     myclassbase.foo(2,3.0);

}
</code></pre>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828361</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Sun, 27 Dec 2009 11:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Sun, 27 Dec 2009 12:52:18 GMT]]></title><description><![CDATA[<p>Zuerst einmal: Virtuelle Basisklasse != abstrakte Basisklasse.</p>
<p>Weisst du bereits zur Kompilierzeit, welche Version du aufrufen willst, oder ist das erst zur Laufzeit bekannt? Wenn die beiden Funktionen unterschiedliche Signaturen haben, kannst du diese nicht einheitlich ansprechen. Ich fände eine If-Abfrage naheliegender als Polymorphie (man muss für einzelne Funktionen nicht gleich Klassen bauen), aber du müsstest dir überlegen, wie du das mit unterschiedlichen Parametern handhabst.</p>
<p>Kannst du vielleicht etwas näher erläutern, wieso du zwei unterschiedliche Funktionen gleich behandeln willst (oder was für Funktionen das sind)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828409</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Dec 2009 12:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Sun, 27 Dec 2009 12:57:50 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ich fände eine If-Abfrage naheliegender als Polymorphie (man muss für einzelne Funktionen nicht gleich Klassen bauen)</p>
</blockquote>
<p>Warum nicht? Das Strategiemuster würde sich doch hier anbieten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828414</guid><dc:creator><![CDATA[witte]]></dc:creator><pubDate>Sun, 27 Dec 2009 12:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Sun, 27 Dec 2009 14:24:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Weisst du bereits zur Kompilierzeit, welche Version du aufrufen willst, oder ist das erst zur Laufzeit bekannt?</p>
</blockquote>
<p>Ich weiß defnitiv erst zur Laufzeit bescheid da der user über ein input-flag (Konsolenparameter) zwischen den beiden Libs schalten wird/darf/soll.</p>
<blockquote>
<p>Kannst du vielleicht etwas näher erläutern, wieso du zwei unterschiedliche Funktionen gleich behandeln willst</p>
</blockquote>
<p>Weil ich 2 unterschiedlich performante Bibliotheken habe. Ich will in meinem Algorithmus die Auswirkung beider Bibliotheken (Laufzeitperformanz) darstellen.<br />
Es wird dasselbe getan, nur bekommt die eine Bibliothek etwas andere Datenstrukturen und etwas mehr input.</p>
<p>Die Libs sind numerische Bibliotheken die Funktionen beinhalten die sehr performant z.B. Matrix-Vektor Produkte oder gewisse mathematische Zerlegungen berechnen.</p>
<p>Wie würde das denn mit dem Strategie-Pattern aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828477</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Sun, 27 Dec 2009 14:44:08 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>Es wird dasselbe getan, nur bekommt die eine Bibliothek etwas andere Datenstrukturen und etwas mehr input.</p>
</blockquote>
<p>Sind diese bibliotheksspezifischen Strukturen über mehrere Funktionsaufrufe konstant? Dann könnte man sie doch im Konstruktor übergeben. Also eine Schnittstellenklasse mit rein virtuellen Methoden, zwei Wrapper für die beiden Libs die diese Schnittstellenklasse implementieren und spezifische Argumente vorher im ctor bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828490</guid><dc:creator><![CDATA[witte]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Sun, 27 Dec 2009 14:50:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Sind diese bibliotheksspezifischen Strukturen über mehrere Funktionsaufrufe konstant? Dann könnte man sie doch im Konstruktor übergeben. Also eine Schnittstellenklasse mit rein virtuellen Methoden, zwei Wrapper für die beiden Libs die diese Schnittstellenklasse implementieren und spezifische Argumente vorher im ctor bekommen.</p>
</blockquote>
<p>Ich weiß nicht genau was du meinst...falls du meinst ob sich die signatur der einzelnen funktionen EINER Lib unterscheidet dann ja. Die Datenstrukturen sind aber natürlich für die LIB spezifisch konstant.<br />
Kurzes Beispiel? wäre sehr hilfreich danke <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/1828498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828498</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Bibliotheken: Virtuelle Basisklasse oder wie? on Mon, 28 Dec 2009 11:07:37 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
ich bräcuhte leider immer noch einen rat....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828804</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Mon, 28 Dec 2009 11:07:37 GMT</pubDate></item></channel></rss>