<?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[&amp;quot;auto&amp;quot; für Klassen Member?]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen wir hätten folgendes Szenario:</p>
<pre><code class="language-cpp">class MyClass
{
public:
	template&lt;typename T0, typename T1&gt;
	MyClass(
		T0 Param0,
		T1 Param1
	)
	{
		T0 var0;				// funktioniert
		T1 var1;				// 		&quot;&quot;
		decltype(Param0) var2;	//      &quot;&quot;
		auto var4 = Param1;		//		&quot;&quot;
	}
};

int main()
{
	MyClass c(4, 4.0);		// var0 == int, var1 == double, var2 == int, var3 == double
}
</code></pre>
<p>Nun würde ich gerne außerhalb des Konstruktors Variablen vom Typ T0 und T1 deklarieren. Die Verwendung von MyClass (zu sehen in main()) soll allerdings gleich bleiben.</p>
<p>Folgendes habe ich probiert, ist aber leider nicht möglich:</p>
<pre><code class="language-cpp">class MyClass
{
	auto m0, m1;

public:
	template&lt;typename T0, typename T1&gt;
	MyClass(
		T0 Param0,
		T1 Param1
	) : m0(Param0), m1(Param1)
	{
		T0 var0;				// funktioniert
		T1 var1;				// 		&quot;&quot;
		decltype(Param0) var2;	//      &quot;&quot;
		auto var4 = Param1;		//		&quot;&quot;
	}
};
</code></pre>
<p>Eigentlich schade, da zur Kompilierzeit auswertbar. Gibt es einen Workaround oder ähnliches dafür?</p>
<p>Danke vorab.</p>
<p>PS:<br />
Compiler: MSVC10</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270574/quot-auto-quot-für-klassen-member</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 04:43:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270574.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jul 2010 18:12:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Wed, 14 Jul 2010 18:12:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen wir hätten folgendes Szenario:</p>
<pre><code class="language-cpp">class MyClass
{
public:
	template&lt;typename T0, typename T1&gt;
	MyClass(
		T0 Param0,
		T1 Param1
	)
	{
		T0 var0;				// funktioniert
		T1 var1;				// 		&quot;&quot;
		decltype(Param0) var2;	//      &quot;&quot;
		auto var4 = Param1;		//		&quot;&quot;
	}
};

int main()
{
	MyClass c(4, 4.0);		// var0 == int, var1 == double, var2 == int, var3 == double
}
</code></pre>
<p>Nun würde ich gerne außerhalb des Konstruktors Variablen vom Typ T0 und T1 deklarieren. Die Verwendung von MyClass (zu sehen in main()) soll allerdings gleich bleiben.</p>
<p>Folgendes habe ich probiert, ist aber leider nicht möglich:</p>
<pre><code class="language-cpp">class MyClass
{
	auto m0, m1;

public:
	template&lt;typename T0, typename T1&gt;
	MyClass(
		T0 Param0,
		T1 Param1
	) : m0(Param0), m1(Param1)
	{
		T0 var0;				// funktioniert
		T1 var1;				// 		&quot;&quot;
		decltype(Param0) var2;	//      &quot;&quot;
		auto var4 = Param1;		//		&quot;&quot;
	}
};
</code></pre>
<p>Eigentlich schade, da zur Kompilierzeit auswertbar. Gibt es einen Workaround oder ähnliches dafür?</p>
<p>Danke vorab.</p>
<p>PS:<br />
Compiler: MSVC10</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926316</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Wed, 14 Jul 2010 18:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Wed, 14 Jul 2010 18:30:13 GMT]]></title><description><![CDATA[<p>Normal programmieren mit ner template Klasse. Für sowas hat man sich sicher nicht auto ausgedacht. Beim Copy-Ctor wäre das für den Compiler sowieso richtig aufwendig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926326</guid><dc:creator><![CDATA[Prof. Dr. Kurzzug]]></dc:creator><pubDate>Wed, 14 Jul 2010 18:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Wed, 14 Jul 2010 18:30:48 GMT]]></title><description><![CDATA[<p>Was soll denn dann sizeof(MyClass) sein? Das kann so gar nicht funktionieren. Wenn Du die Klasse parametrisieren willst, kannst Du das mit einem Klassentemplate machen. Über ein Funktionstemplate könne man Templateparameter deduzieren lassen. Das kann dann zB so aussehen:</p>
<pre><code class="language-cpp">auto paar = make_pair(2,3.14);
// decltype(paar) == std::pair&lt;int,double&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1926328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926328</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 14 Jul 2010 18:30:48 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Wed, 14 Jul 2010 18:32:25 GMT]]></title><description><![CDATA[<p>Das geht nicht (ist auch keine Beschränkung in der Syntax). Was soll der Compiler bei sowas machen?</p>
<pre><code class="language-cpp">MyClass a(1, 1);
a = MyClass(&quot;1&quot;, &quot;1&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1926330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926330</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 14 Jul 2010 18:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Wed, 14 Jul 2010 18:58:19 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Was soll denn dann sizeof(MyClass) sein?</p>
</blockquote>
<p>Das wäre nicht auswertbar. Der Compiler müsste ggf. für jede Instanz von MyClass eine eigene Klasse anlegen.</p>
<p>ipsec schrieb:</p>
<blockquote>
<p>Was soll der Compiler bei sowas machen?</p>
<pre><code class="language-cpp">MyClass a(1, 1);
a = MyClass(&quot;1&quot;, &quot;1&quot;);
</code></pre>
</blockquote>
<p>Das wäre nicht möglich, da MyClass(int, int) != MyClass(char[], char[]);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926337</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Wed, 14 Jul 2010 18:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Wed, 14 Jul 2010 19:02:56 GMT]]></title><description><![CDATA[<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>Das wäre nicht möglich, da MyClass(int, int) != MyClass(char[], char[]);</p>
</blockquote>
<p>Exakt! Und genau für sowas hat Gott (oder von mir aus auch Stroustrup) die Templateklassen erfunden. Also verschiebe das <code>template&lt;typename T0, typename T1&gt;</code> statt an den Konstruktor einfach an die Klasse und die Sache ist praktisch geklärt.</p>
<pre><code class="language-cpp">template&lt;typename T0, typename T1&gt;
class MyClass
{
    T0 m0;
    T1 m1;

public:
    MyClass(
        T0 Param0,
        T1 Param1
    ) : m0(Param0), m1(Param1)
    {
    }
};
</code></pre>
<p>Ich glaube übrigens, das ist genau das, was du suchst. Jede Variable mit unterschiedlichen Typen hat ihre eigene Klasse und z.B. <code>MyClass&lt;int, int&gt;</code> hat mit <code>MyClass&lt;char[], char[]&gt;</code> nichts zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926338</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 14 Jul 2010 19:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Thu, 15 Jul 2010 04:10:49 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Ich glaube übrigens, das ist genau das, was du suchst. Jede Variable mit unterschiedlichen Typen hat ihre eigene Klasse und z.B. <code>MyClass&lt;int, int&gt;</code> hat mit <code>MyClass&lt;char[], char[]&gt;</code> nichts zu tun.</p>
</blockquote>
<p>Danke für die gute Absicht, aber das ist mir natürlich klar ;-). Da jedoch beide Template-Argumente ebenfalls Parameter des einzigen Konstruktors sind, habe ich gehofft, dass auch eine Möglichkeit besteht das ganze an den Konstruktor zu verlagern um so die Deklaration einheitlich zu halten.</p>
<p>Mir ist schon klar, weshalb es nicht funktioniert. Ich denke ich werde eine Workaround implementieren. Danke trotzdem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926434</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Thu, 15 Jul 2010 04:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Fri, 16 Jul 2010 11:20:02 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926437</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;auto&amp;quot; für Klassen Member? on Thu, 15 Jul 2010 08:18:46 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Was soll denn dann sizeof(MyClass) sein?</p>
</blockquote>
<p>Das wäre nicht auswertbar. Der Compiler müsste ggf. für jede Instanz von MyClass eine eigene Klasse anlegen.</p>
</blockquote>
<p>Wie ich schon sagte: Dafür sind Klassentemplates da !!!</p>
<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>ipsec schrieb:</p>
<blockquote>
<p>Was soll der Compiler bei sowas machen?</p>
<pre><code class="language-cpp">MyClass a(1, 1);
a = MyClass(&quot;1&quot;, &quot;1&quot;);
</code></pre>
</blockquote>
<p>Das wäre nicht möglich, da MyClass(int, int) != MyClass(char[], char[]);</p>
</blockquote>
<p>Wie ich schon sagte: Dafür sind Klassentemplates da !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926498</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 15 Jul 2010 08:18:46 GMT</pubDate></item></channel></rss>