<?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[&#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen]]></title><description><![CDATA[<p>ganz einfach:</p>
<pre><code class="language-cpp">template&lt; typename VectorClass &gt;
class MyClass
{
  MyClass()
  {
     //die klasse kann nur vectoren verwalten
     //nun rauche ich hier aber T der VectorClass 
    //WIE???
  }
};

int main()
{
   MyClass&lt; vector&lt;int&gt; &gt;     a1; //hier wäre T=int
   MyClass&lt; vector&lt;float&gt; &gt;   a2; //hier wäre T=float
   MyClass&lt; ToVector&lt;int&gt; &gt;   a3; //hier wäre T=int
   MyClass&lt; ToVector&lt;float&gt; &gt; a4; //hier wäre T=float

   return 0;
};
</code></pre>
<p>kann man das nur mit einem zweiten template argument erschlagen, also</p>
<pre><code class="language-cpp">template&lt; typename VectorClass, typename T &gt;
class MyClass
</code></pre>
<p>und wenn, kann man dann irgendwie garantieren, dass man nicht:</p>
<pre><code class="language-cpp">MyClass&lt; vector&lt;float&gt;, int &gt; a1;
</code></pre>
<p>angeben kann???</p>
<p>zur vereinfachung habe ich derzeit folgende zwischenlösung:</p>
<pre><code class="language-cpp">template&lt; typename VectorClass &gt;
class MyClass
{
  MyClass()
  {
    VectorClass dummy(1,0)
    std::cout&lt;&lt;&quot;T=&quot;&lt;&lt;(std::string)typeid(dummy[0]).name()&lt;&lt;std::endl;
  }
};
</code></pre>
<p>ach ja, es werden ausschleißlich numerische werte in den vectoren gehalten</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202166/template-myclass-lt-typname-vectorclass-gt-typ-der-templateclass-ermittlen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 14:09:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202166.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Jan 2008 13:00:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:03:19 GMT]]></title><description><![CDATA[<p>ganz einfach:</p>
<pre><code class="language-cpp">template&lt; typename VectorClass &gt;
class MyClass
{
  MyClass()
  {
     //die klasse kann nur vectoren verwalten
     //nun rauche ich hier aber T der VectorClass 
    //WIE???
  }
};

int main()
{
   MyClass&lt; vector&lt;int&gt; &gt;     a1; //hier wäre T=int
   MyClass&lt; vector&lt;float&gt; &gt;   a2; //hier wäre T=float
   MyClass&lt; ToVector&lt;int&gt; &gt;   a3; //hier wäre T=int
   MyClass&lt; ToVector&lt;float&gt; &gt; a4; //hier wäre T=float

   return 0;
};
</code></pre>
<p>kann man das nur mit einem zweiten template argument erschlagen, also</p>
<pre><code class="language-cpp">template&lt; typename VectorClass, typename T &gt;
class MyClass
</code></pre>
<p>und wenn, kann man dann irgendwie garantieren, dass man nicht:</p>
<pre><code class="language-cpp">MyClass&lt; vector&lt;float&gt;, int &gt; a1;
</code></pre>
<p>angeben kann???</p>
<p>zur vereinfachung habe ich derzeit folgende zwischenlösung:</p>
<pre><code class="language-cpp">template&lt; typename VectorClass &gt;
class MyClass
{
  MyClass()
  {
    VectorClass dummy(1,0)
    std::cout&lt;&lt;&quot;T=&quot;&lt;&lt;(std::string)typeid(dummy[0]).name()&lt;&lt;std::endl;
  }
};
</code></pre>
<p>ach ja, es werden ausschleißlich numerische werte in den vectoren gehalten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432982</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:03:08 GMT]]></title><description><![CDATA[<p>Wenn du es nur mit STL-vector&lt;&gt;en zu tun hast, könntest du den Membertyp über &quot;typename VectorClass::value_type&quot; erreichen, bei einer eigenen Klasse mußt du selber einen entsprechenden Typedef bereitstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432987</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:05:22 GMT]]></title><description><![CDATA[<p>ah, das ist eine idee... das hat doch einen namen: policy oder traits, oder?<br />
d.h., bei einem eigenen datentyp mus sich lediglich so ein typedef definieren, ja?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432988</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:07:17 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>ganz einfach:<br />
...</p>
</blockquote>
<p>Hast du dir mal die Typedefs innerhalb von std::vector angeschaut?</p>
<p>Probiere mal:<br />
VectorClass::value_type als Typangabe</p>
<p>Der Trick ist folgender (Unvollständiges Minibeispiel):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class T1
{
    public:
        typedef T value_type;
        ...
};

template&lt;typename T1Type&gt;
class T2
{
    private:
        T1Type::value_type var;  // Verwendet das Typedef &quot;value_type&quot;
        ...
};
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432993</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:09:22 GMT]]></title><description><![CDATA[<p>ja, das ist die beste lösung.<br />
klappt 1A. ärgerlich, das sich da nicht selbst drauf gekommen bin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432996</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:12:31 GMT]]></title><description><![CDATA[<p>Traits ist afaik etwas anderes (taucht aber auch gelegentlich in der STL auf - besonders wenn man dem Typ keine zusätzlichen Typedefs aufquetschen kann).</p>
<p>muffmolch schrieb:</p>
<blockquote>
<p>d.h., bei einem eigenen datentyp mus sich lediglich so ein typedef definieren, ja?</p>
</blockquote>
<p>Ja, solange du die Möglichkeit dafür hast:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class ToVector
{
public:
  typedef T value_type;
  ...
};
</code></pre>
<p>Wenn du die ToVector-Klasse nicht verändern kannst/willst, kannst du auch eine Traits-Klasse als Hilfsmittel verwenden:</p>
<pre><code class="language-cpp">template&lt;typename Cont&gt;
struct container_traits
{
  typedef typename Cont::value_type value_type;
  ...//die STL-Container bieten noch einige weitere hilfreiche typedef's
};

template&lt;typename T&gt;
struct container_traits&lt;ToVector&lt;T&gt; &gt;
{
  typedef T value_type;
  ...
};

//Verwendung
template&lt;typename VectorClass&gt;
class MyClass
{
  MyClass()
  {
    typename container_traits&lt;VectorClass&gt;::value_type temp;
    ...
  }
  ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1432999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432999</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:14:31 GMT]]></title><description><![CDATA[<p>Ich sags mal mti deinem Beispiel:</p>
<pre><code class="language-cpp">template&lt; typename VectorClass &gt;
class MyClass
{
  typedef VectorClass::value_type value_type; //die Ts aus den vectorklassen

  MyClass()
  {
  }
};

int main()
{
   MyClass&lt; vector&lt;int&gt; &gt;     a1; //hier wäre value_type=int
   MyClass&lt; vector&lt;float&gt; &gt;   a2; //hier wäre value_type=float
   MyClass&lt; ToVector&lt;int&gt; &gt;   a3; //hier wäre value_type=int
   MyClass&lt; ToVector&lt;float&gt; &gt; a4; //hier wäre value_type=float

   return 0;
};
</code></pre>
<p>Das Design setzt voraus, dass jegliche mit diesem Template verwendete vector-Klasse ein typedef namens value_type bereitstellt (moeglichst auf ihren &quot;T-Typ&quot;):</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class ToVector {
  typedef T value_type; //&lt;&lt;wichtig
};
</code></pre>
<p>Ist sowieso immer nett, wenn man bei eigenen Containerklassen derartige typedefs mitliefert, um sie so weit wie moeglich mit den std::Containern kompatibel zu halten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433001</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:25:48 GMT]]></title><description><![CDATA[<p>wie ist denn das mit typedefs und vererbung?</p>
<pre><code class="language-cpp">class A{
public: 
  typedef int value_type;
};

class B : public A{
public: 
  typedef float value_type;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1433009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433009</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:36:37 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>kann man das nur mit einem zweiten template argument erschlagen, also</p>
<pre><code class="language-cpp">template&lt; typename VectorClass, typename T &gt;
class MyClass
</code></pre>
<p>und wenn, kann man dann irgendwie garantieren, dass man nicht:</p>
<pre><code class="language-cpp">MyClass&lt; vector&lt;float&gt;, int &gt; a1;
</code></pre>
<p>angeben kann???</p>
</blockquote>
<p>man kann. mit dem c++ template-template-feature:</p>
<pre><code class="language-cpp">template&lt;template &lt;typename&gt; class TC, typename TV&gt;
class foo
{
public:
    typedef TV value_type;
    //...
private:
    TC&lt;value_type&gt; m_bar;
};

int main()
{
    foo&lt;std::vector, int&gt; f;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1433021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433021</guid><dc:creator><![CDATA[template-template]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:43:13 GMT]]></title><description><![CDATA[<p>template-template schrieb:</p>
<blockquote>
<p>man kann. mit dem c++ template-template-feature:</p>
</blockquote>
<p>Ja, darüber hatte ich auch nachgedacht, es aber verworfen, weil die Lösung hier nicht funktionieren wird (auch wenn das kaum ein Programmierer bemerkt, benötigt std::vector <strong>ZWEI</strong> Template-Parameter und ist deshalb nicht kompatibel zur MyClass-Parameterliste).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433025</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:48:42 GMT]]></title><description><![CDATA[<p>oh. gehen default template-parameter laut standard nicht mit template-template-parametern? mit mingw-gcc-3.4.5 kompiliert es gut. habs jetzt mit vc-7.1 probiert und der will tatsächlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433031</guid><dc:creator><![CDATA[template-template]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 13:59:30 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>d.h., bei einem eigenen datentyp mus sich lediglich so ein typedef definieren, ja?</p>
</blockquote>
<p>Auch eine Templatemetafunktion kann prinzipiell dafür genutzt werden - das Wort traits würde ich dafür aber nicht unbedingt verwenden:</p>
<pre><code class="language-cpp">template&lt; typename VectorClass &gt;
class MyClass;

template&lt; typename T &gt;
class TemplateTypeParameter1of1 {};

template&lt; template&lt; typename &gt; class T, typename U &gt;
class TemplateTypeParameter1of1&lt; T&lt; U &gt; &gt;
{
    typedef U type;
};
</code></pre>
<p>über TemplateTypeParameter1of1&lt; C &gt;::type ist dann der Templateparameter ermittelbar, selbst wenn C kein inneres typedef dafür hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433034</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 Jan 2008 13:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 14:20:03 GMT]]></title><description><![CDATA[<p>template-template schrieb:</p>
<blockquote>
<p>oh. gehen default template-parameter laut standard nicht mit template-template-parametern? mit mingw-gcc-3.4.5 kompiliert es gut. habs jetzt mit vc-7.1 probiert und der will tatsächlich nicht.</p>
</blockquote>
<p>Nein, geht laut standard nicht. Und selbst wenn man es auf irgendeine getrickste Weise hinbekommt, im Falle eines std::vector&lt;&gt;s noch den Allocator dazuzufrickeln, ist dem Library-Hersteller nicht verboten, im vector&lt;&gt; noch eigene zusaetzliche Templateparameter (mit defaults) einzubauen die alles wieder ueber den Haufen schiessen. Deshalb sind std::Container allgemein nicht geeignet fuer template template parameter <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433054</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 08 Jan 2008 14:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 14:59:50 GMT]]></title><description><![CDATA[<p>nt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433068</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 Jan 2008 14:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 16:25:01 GMT]]></title><description><![CDATA[<p>nt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433138</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 08 Jan 2008 16:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Tue, 08 Jan 2008 16:34:49 GMT]]></title><description><![CDATA[<p><strong>n</strong>o <strong>t</strong>ext</p>
<p>scnr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433147</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 08 Jan 2008 16:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template myclass&amp;lt; typname VectorClass &amp;gt; ... typ der TemplateClass ermittlen on Wed, 09 Jan 2008 09:14:49 GMT]]></title><description><![CDATA[<p>template-template schrieb:</p>
<blockquote>
<p>oh. gehen default template-parameter laut standard nicht mit template-template-parametern? mit mingw-gcc-3.4.5 kompiliert es gut. habs jetzt mit vc-7.1 probiert und der will tatsächlich nicht.</p>
</blockquote>
<p>schoen zu sehen, dass minGW alias gcc mal etwas durchläßt und der doch sehr liberal eingestellte cl-compiler nicht <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/1433458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433458</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Wed, 09 Jan 2008 09:14:49 GMT</pubDate></item></channel></rss>