<?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[frage zu templates ??]]></title><description><![CDATA[<p>hi an alle,</p>
<p>ich arbeite gerade mit cppunit und visual c++, es geht aber mehr<br />
um templates... und zwar möchte ich meine testfälle aus einer textdatei holen, die ungefähr so aussieht:</p>
<p>TestCaseClass.myNumberTest<br />
TestCaseClass.myOtherTest</p>
<p>Der jetzige code sieht so aus, die testfälle werden noch nicht aus der datei gelesen.</p>
<pre><code>runner.addTest( new CppUnit::TestCaller&lt;TestCaseClass&gt;(&quot;myNumberTest&quot;,  &amp;TestCaseClass::myNumberTest) ); 
runner.addTest( new CppUnit::TestCaller&lt;TestCaseClass&gt;(&quot;myOtherTest&quot;, &amp;TestCaseClass::myOtherTest) );
</code></pre>
<p>ich möchte das jetzt dynamisch in einer schleife aus der datei lesen und die entsprechenden addTest methoden aufrufen. wie würdet ihr das programmieren?</p>
<p>Das problem ist, dass aus der textdatei nur strings kommen und ich nicht weiss,was ich mit dem template machen soll, weil es ja eine Klasse als paramter bekommt. in java würde man da wohl mit reflection rangehen, aber was ist in c++? hoffe ihr habt mein problem verstanden <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/topic/163014/frage-zu-templates</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 02:48:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163014.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Oct 2006 09:33:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to frage zu templates ?? on Wed, 25 Oct 2006 09:33:11 GMT]]></title><description><![CDATA[<p>hi an alle,</p>
<p>ich arbeite gerade mit cppunit und visual c++, es geht aber mehr<br />
um templates... und zwar möchte ich meine testfälle aus einer textdatei holen, die ungefähr so aussieht:</p>
<p>TestCaseClass.myNumberTest<br />
TestCaseClass.myOtherTest</p>
<p>Der jetzige code sieht so aus, die testfälle werden noch nicht aus der datei gelesen.</p>
<pre><code>runner.addTest( new CppUnit::TestCaller&lt;TestCaseClass&gt;(&quot;myNumberTest&quot;,  &amp;TestCaseClass::myNumberTest) ); 
runner.addTest( new CppUnit::TestCaller&lt;TestCaseClass&gt;(&quot;myOtherTest&quot;, &amp;TestCaseClass::myOtherTest) );
</code></pre>
<p>ich möchte das jetzt dynamisch in einer schleife aus der datei lesen und die entsprechenden addTest methoden aufrufen. wie würdet ihr das programmieren?</p>
<p>Das problem ist, dass aus der textdatei nur strings kommen und ich nicht weiss,was ich mit dem template machen soll, weil es ja eine Klasse als paramter bekommt. in java würde man da wohl mit reflection rangehen, aber was ist in c++? hoffe ihr habt mein problem verstanden <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/1160862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160862</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Wed, 25 Oct 2006 09:33:11 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Wed, 25 Oct 2006 11:21:30 GMT]]></title><description><![CDATA[<p>Da wirst du wohl nicht um ein Programm/Skript rumkommen, womit du die Datei ausliest und den entsprechenden Code generierst.</p>
<p>C++ wird eben (üblicherweise) kompiliert. Da kann man Templates etc. nicht dynamisch generieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160922</guid><dc:creator><![CDATA[ruediger@uni]]></dc:creator><pubDate>Wed, 25 Oct 2006 11:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Wed, 25 Oct 2006 12:44:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">TestCaseClass.myNumberTest 
TestCaseClass.myOtherTest
</code></pre>
<p>Was soll das bedeuten?</p>
<pre><code class="language-cpp">... CppUnit::TestCaller&lt;TestCaseClass&gt; ...
... CppUnit::TestCaller&lt;TestCaseClass&gt; ...
</code></pre>
<p>Sehe an der Stelle eher das Problem darin, dass man irgendwo definieren muß was der Test macht. (Wenn ich das richtig interpretiere, ist das aktuell durch eine statische Funktion gelöst. Das Template ist an der Stelle weniger das Problem)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160982</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Wed, 25 Oct 2006 12:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Wed, 25 Oct 2006 15:01:33 GMT]]></title><description><![CDATA[<p>der code ist nicht so wichtig, es geht eher um templates...Es soll leider nicht compiliert werden !!</p>
<p>in einer datei steht in jeder Zeile immer die Klasse und der entprechende Testfall, z.b.</p>
<p>Auto.testFahre<br />
Fahrrad.testReifen<br />
Bus.testBenzin</p>
<p>nunbietet CppUnit die Methode addTest an, um die entsprechenden Tesfälle in eine Testsuite zu fügen.</p>
<pre><code>suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;Auto&gt;(&quot;testFahre&quot;,&amp;Auto::testFahre));

suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;Fahrrad&gt;(&quot;testReifen&quot;,&amp;Fahrrad::testReifen));

suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;Bus&gt;(&quot;testBenzin&quot;,&amp;Bus::testBenzin));
</code></pre>
<p>Da ich vorgesehen habe, die Testfälle aus einer Datei zu holen und in einer schleife dynamisch einzulesen, bräuchte man so etwas: (in java reflection genannt)</p>
<pre><code>suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;getClassByName(&quot;Auto&quot;)&gt;(&quot;testFahre&quot;,&amp;getClassByName(&quot;Auto::testFahre&quot;));
</code></pre>
<p>ansonsten müsste ich mit 1000 if, switch und case Anweisungen arbeiten, um die strings zu vergleichen.</p>
<pre><code>if (string == Auto.testFahre) {
suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;Auto&gt;(&quot;testFahre&quot;,&amp;Auto::testFahre));
}
</code></pre>
<p>und das wollte ich vermeiden ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161073</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Wed, 25 Oct 2006 15:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Wed, 25 Oct 2006 19:18:09 GMT]]></title><description><![CDATA[<p>lol.<br />
muahahaha.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><strong>Das geht in C++ nicht</strong> (leider)</p>
<p>Aber du gehst dein Problem ärschlings an. Sag mal einfach: was willst du denn damit erreichen, nicht wie du gedenkst es zu erreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161388</guid><dc:creator><![CDATA[Plotzenhotz]]></dc:creator><pubDate>Wed, 25 Oct 2006 19:18:09 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Thu, 26 Oct 2006 08:46:59 GMT]]></title><description><![CDATA[<p>mentalman schrieb:</p>
<blockquote>
<p>...<br />
ansonsten müsste ich mit 1000 if, switch und case Anweisungen arbeiten, um die strings zu vergleichen. ...</p>
</blockquote>
<p>Naja, Du kannst natürlich auch mit einer</p>
<pre><code class="language-cpp">typedef std::map&lt;std::string, void (*)(void) &gt; FuncMap;
</code></pre>
<p>arbeiten.<br />
Damit bist Du zwar zur Compilezeit auch &quot;festgelegt&quot;, aber immerhin ist die Pflege recht easy und selbsterkärend.</p>
<pre><code class="language-cpp">FuncMap funcMap;

// füllen
funcMap[&quot;myNumberTest&quot;] = &amp;myNumberTest;
funcMap[&quot;myOtherTest&quot;] = &amp;myOtherTest;
...

// call
FuncMap::const_iterator it = fm.find(fname);
if(it != fm.end()) (*(it-&gt;second))();
</code></pre>
<p>Da &quot;passen&quot; zwar auch statische Memberfunktionen rein, aber ich persönlich würde auf die &quot;TestCaseClass&quot; sowieso komplett verzichten ... braucht's nicht und ist wohl auch keine objektorientierte Aufgabenstellung.<br />
(Alternativ geht auch eine</p>
<pre><code class="language-cpp">typedef std::map&lt;std::string, void (TestCaseClass::*)(void)&gt; funcMap;
FuncMap funcMap;

// füllen
funcMap[&quot;myNumberTest&quot;] = &amp;TestCaseClass::myNumberTest;
funcMap[&quot;myOtherTest&quot;] = &amp;TestCaseClass::myOtherTest;
...

// call
TestCaseClass a;
FuncMap::const_iterator it = fm.find(fname);
if(it != fm.end()) (a.*(it-&gt;second))();
</code></pre>
<p>)</p>
<p>Wenn Du Klassendeklarationen dynamisch zur Laufzeit laden willst, gibt's da im C++-Standard (AFAIK) keine Festlegung. Vielleicht hat boost da was ... ansonsten mußt Du Dir das selbst programmieren (wird aber hakelig, denke ich).<br />
Ehrlich gesagt halte ich derartige Flexibilisierung über für oftmals unnötig....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161605</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 26 Oct 2006 08:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Fri, 27 Oct 2006 06:53:39 GMT]]></title><description><![CDATA[<p>Naja man braucht an der Stelle eine Verwaltung für die existierenden Testklassen bei der zur Laufzeit alle angemeldeten Klassen per Id abfragbar sind.</p>
<p>Dies kann man wie beschrieben über Funktionspointer lösen... geht aber auch in dem man ein Objekt der jeweiligen Klasse anmeldet und dann eine Funktion Clone () aufruft.<br />
<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/1162325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162325</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 27 Oct 2006 06:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Tue, 31 Oct 2006 07:21:09 GMT]]></title><description><![CDATA[<p>danke für die antworten..</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@simon2</a>: kannst du die konstruktion</p>
<pre><code>typedef std::map&lt;std::string, void (*)(void) &gt; FuncMap;
</code></pre>
<p>noch mal erkären? ist das ein hashtable?? c++ ist ganz schön kryptisch manchmal..damit kann ich mich nicht so richtig anfreunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165060</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Tue, 31 Oct 2006 07:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Tue, 31 Oct 2006 07:25:02 GMT]]></title><description><![CDATA[<p>mentalman schrieb:</p>
<blockquote>
<pre><code>typedef std::map&lt;std::string, void (*)(void) &gt; FuncMap;
</code></pre>
<p>noch mal erkären? ist das ein hashtable?? c++ ist ganz schön kryptisch manchmal..damit kann ich mich nicht so richtig anfreunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
</blockquote>
<p>Das ist ein typedef auf eine map, um Schreibarbeit zu sparen. Der Schlüssel (der ist eindeutig) ist ein std::string. Jedem Schlüssel ist ein Funktionszeiger auf eine Funktion, die nichts entgegennimmt und nichts zurückgibt zugeordnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165063</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 31 Oct 2006 07:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Tue, 31 Oct 2006 08:20:17 GMT]]></title><description><![CDATA[<p>ok .. erinnert mich an ein hashtable in java. jetzt habe ich folgendes und das kopiliert auch.. das problem ist nur da wo die fragezeichen stehen. welchen rückgabewert müsste die methode &quot;getFunc&quot; haben????</p>
<p>Teil von .h :</p>
<pre><code>class TDDLI_TestCase:public CppUnit::TestCase  
{
	typedef std::map&lt;std::string, void (TDDLI_TestCase::*)(void)&gt; FuncMap; 

public:
	TDDLI_TestCase();
	virtual ~TDDLI_TestCase();
	???????? getFunc(string name);
	void setUp();
	void tearDown();
	void test1();
	void test2();
	void test3();
private:
	 FuncMap funcMap; 
};

Teil von .cpp :

TDDLI_TestCase::TDDLI_TestCase()
{
	funcMap[&quot;TDDLI_TestCase.test1&quot;] = &amp;TDDLI_TestCase::test1; 
	funcMap[&quot;TDDLI_TestCase.test2&quot;] = &amp;TDDLI_TestCase::test2; 
	funcMap[&quot;TDDLI_TestCase.test3&quot;] = &amp;TDDLI_TestCase::test2; 
}

??????????? getFunc(string name)
{
	return funcMap[name];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1165097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165097</guid><dc:creator><![CDATA[mentalman]]></dc:creator><pubDate>Tue, 31 Oct 2006 08:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu templates ?? on Tue, 31 Oct 2006 08:26:26 GMT]]></title><description><![CDATA[<p>Den Funktionszeiger (bzw. eigentlich Methodenzeiger). Dafür machste aber am Besten auch noch 'n typedef. Hier ein schönes Tutorial: <a href="http://www.newty.de/fpt/index.html" rel="nofollow">http://www.newty.de/fpt/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165098</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 31 Oct 2006 08:26:26 GMT</pubDate></item></channel></rss>