<?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[Typ eines Templatearguments für Deklaration verwenden]]></title><description><![CDATA[<p>Tach...</p>
<p>Ich weiß der Titel is grausam, aber ich wusste nicht, wie ich es besser formulieren sollte! Mein Problem ist folgendes:</p>
<pre><code>template &lt;typename chtype&gt; class Logger {
private:
std::ostream&amp; m_strm;
//..
public
Logger(std::ostream&amp;);
//..
};
</code></pre>
<p>Eine Instanz dieser Klasse will ich jetzt also mit einem beliebigen Stream initialisieren ... folgendes hab ich schon probiert:</p>
<pre><code>Logger&lt;std::clog::value_type&gt; test(std::clog);
Logger&lt;typename std::clog::value_type&gt; test(std::clog);
</code></pre>
<p>Wie teile ich dem Logger mit, welchen char_type er verwenden soll, oder lässt sich das irgendwie implizit machen? Hier häng ich fest!</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/127214/typ-eines-templatearguments-für-deklaration-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 00:17:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127214.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Nov 2005 12:33:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 12:33:41 GMT]]></title><description><![CDATA[<p>Tach...</p>
<p>Ich weiß der Titel is grausam, aber ich wusste nicht, wie ich es besser formulieren sollte! Mein Problem ist folgendes:</p>
<pre><code>template &lt;typename chtype&gt; class Logger {
private:
std::ostream&amp; m_strm;
//..
public
Logger(std::ostream&amp;);
//..
};
</code></pre>
<p>Eine Instanz dieser Klasse will ich jetzt also mit einem beliebigen Stream initialisieren ... folgendes hab ich schon probiert:</p>
<pre><code>Logger&lt;std::clog::value_type&gt; test(std::clog);
Logger&lt;typename std::clog::value_type&gt; test(std::clog);
</code></pre>
<p>Wie teile ich dem Logger mit, welchen char_type er verwenden soll, oder lässt sich das irgendwie implizit machen? Hier häng ich fest!</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/924229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924229</guid><dc:creator><![CDATA[ti8138]]></dc:creator><pubDate>Tue, 22 Nov 2005 12:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 12:44:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Logger&lt;std::ostream::value_type&gt;
</code></pre>
<p>dürfte das richtige sein (clog ist per Standard ein ostream).</p>
<p>Aber eigentlich kannst du sogar davon ausgehen, daß der value_type als char vordefiniert ist.</p>
<p>PS: Wenn du schon auf Basis des Charakter-Typs spezialisierst, würde ich eher direkt basic_ostream&lt;&gt; verwenden:</p>
<pre><code class="language-cpp">template&lt;typename ch&gt;
class Logger
{
  basic_ostream&lt;ch&gt;&amp; m_strm;
public:
  Logger(basic_ostream&lt;ch&gt;&amp; the_strm);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/924250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924250</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 22 Nov 2005 12:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 12:54:44 GMT]]></title><description><![CDATA[<p>Tach...</p>
<p>Mein Fehler, in der Implementation von Logger verwende ich auch basic_ostream&lt;&gt;, nur falsch wiedergegeben...</p>
<p>Also ich habe jetzt folgender maßen versucht, ein Objekt zu instanzieren:</p>
<pre><code>#include &lt;ostream&gt;
#include &lt;iostream&gt;

#include &quot;logger.hpp&quot;

int main(int argc, char *argv[])
{
    MM::Logger&lt;std::clog::value_type&gt; test(std::clog);
    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>[quote=&quot;MinGW 3.4.2&quot;]<br />
main.cpp: In function <code>int main(int, char**)': main.cpp:8: error:</code>std::clog' is not a class or namespace<br />
main.cpp:8: error: <code>value_type' undeclared (first use this function) main.cpp:8: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:8: error: template argument 1 is invalid main.cpp:8: error: invalid type in declaration before '(' token main.cpp:8: error: invalid conversion from \</code>void*' to `int'<br />
[/code]</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/924261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924261</guid><dc:creator><![CDATA[ti8138]]></dc:creator><pubDate>Tue, 22 Nov 2005 12:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 12:57:30 GMT]]></title><description><![CDATA[<p>Du darfst den Operator :: nicht auf ein Objekt, sondern auf einen Klassennamen anwenden - und clog ist vom Typ &quot;ostream&quot;.</p>
<p>PS: ich bin nicht sicher, ob das geht, aber was ist mit &quot;Logger<a href="std::clog.value_type" rel="nofollow">std::clog.value_type</a>&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/924265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924265</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 22 Nov 2005 12:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 13:40:46 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Du darfst den Operator :: nicht auf ein Objekt, sondern auf einen Klassennamen anwenden - und clog ist vom Typ &quot;ostream&quot;.</p>
<p>PS: ich bin nicht sicher, ob das geht, aber was ist mit &quot;Logger<a href="std::clog.value_type" rel="nofollow">std::clog.value_type</a>&quot;?</p>
</blockquote>
<p>Nee das geht nicht.</p>
<p>EDIT:</p>
<p>aber dafür geht:</p>
<pre><code class="language-cpp">template&lt;typename ostream_type &gt;
class Logger
{
  typedef typename ostream_type::char_type ch_type;
  basic_ostream&lt;ch_type&gt;&amp; m_strm;
public:
  Logger(basic_ostream&lt;ch_type&gt;&amp; the_strm):m_strm(the_strm){}
};

int main()
{
   Logger&lt;ostream&gt; logger(clog);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/924330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924330</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Tue, 22 Nov 2005 13:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 14:48:02 GMT]]></title><description><![CDATA[<p>Tach...</p>
<p>mhmm, ist nicht unbedingt das, was ich mir vorgestellt hab, aber wenn soweit funktioniert...</p>
<p>Wie wendet man dann eigentlich solche typedefs in Klassen sinvoll an?? Ich meine wenn ich einen Container mit einem beliebigen Elementtyp habe, dann wäre es doch äußert sinnvoll wenn man folgendes machen kann:</p>
<pre><code>container&lt;element_typ&gt; test;
test::element_type elemet = test[n];
</code></pre>
<p>Und wenn ich mir meine C++ Referenz so anschaue, dann war das obige Beispiel genau der Anwendungssinn, den ich vermutet hatte;</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/924426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924426</guid><dc:creator><![CDATA[ti8138]]></dc:creator><pubDate>Tue, 22 Nov 2005 14:48:02 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 15:06:31 GMT]]></title><description><![CDATA[<p>Am besten, ich werd nochmal etwas konkreter, was mein Problem angeht...</p>
<p>Ich arbeite gerade an einem kleinen Parser der bis jetzt aus den Klassen <strong>Lexer</strong>, <strong>Parser</strong> und <strong>Logger</strong> besteht. Dazu gehören 3 Streams ... ein Input -, ein Output und ein Logstream. <strong>Lexer</strong> und <strong>Parser</strong> hängen vom char_type des Inputstreams ab, der char_type des Logstreams wird <strong>Lexer</strong> als Parameter mitgegeben und dann von <strong>Parser</strong> (wird mit einem Lexer - Objekt initialisiert) übernommen. Desweiteren kann der char_type des Outputstreams als Parameter für <strong>Parser</strong> übergeben werden. So hatte ich mir das vorgestellt, aber wie setze ich das template - mäßig am besten um?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/924446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924446</guid><dc:creator><![CDATA[ti8138]]></dc:creator><pubDate>Tue, 22 Nov 2005 15:06:31 GMT</pubDate></item><item><title><![CDATA[Reply to Typ eines Templatearguments für Deklaration verwenden on Tue, 22 Nov 2005 15:24:36 GMT]]></title><description><![CDATA[<p>Du kannst es natürlich auch einfach so machen:</p>
<pre><code class="language-cpp">template&lt;typename CharType&gt;
class Logger
{
  basic_ostream&lt;CharType&gt;&amp; m_strm;
public:
  Logger(basic_ostream&lt;CharType&gt;&amp; the_strm):m_strm(the_strm){}
};

int main()
{
   Logger&lt;ostream::char_type&gt; logger(clog);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/924467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/924467</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Tue, 22 Nov 2005 15:24:36 GMT</pubDate></item></channel></rss>