<?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[Template-Ableitungsproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Denkproblemchen. Ich poste einfach erstmal den Code. Es geht<br />
hier primär um die Hierarchie und das Design; nicht um den Inhalt.</p>
<pre><code class="language-cpp">#ifdef MSC_VER
#	define NOVTABLE	__declspec(novtable)
#	define ABSTRACT abstract
#else
	#define NOVTABLE
	#define ABSTRACT
#endif

template&lt;
	class  Ty,
	size_t n
&gt;
struct NOVTABLE Member ABSTRACT
{
protected:
	enum {Elem = n};
	mutable Ty memb[n];
};

template&lt;
	class Ty,
&gt;
struct NOVTABLE Member&lt;Ty, 0&gt; ABSTRACT
{
protected:
	size_t Elem;
	mutable Ty* memb;
};

template&lt;
	class Ty
&gt;
class NOVTABLE Interface ABSTRACT
{
protected:
	enum {elSize = sizeof(Ty)};

public:
	virtual func1() = 0;
	virtual func2() = 0;
	virtual func3() = 0;
};

template&lt;
	class  Ty,
	size_t n,
	typename SPECIAL_FUNC&lt;_Ty&gt;::FUNCTION* func = NULL
&gt;
class NOVTABLE Implementation ABSTRACT
	: public Member&lt;Ty, n&gt;,
	  public Interface&lt;Ty&gt;,
	  public Mehr&lt;Ty, n, func&gt;
{
public:
	virtual func1() {}
	virtual func2() {}
	virtual func3() {}
};

template&lt;
	class  Ty,
	size_t n,
	typename SPECIAL_FUNC&lt;_Ty&gt;::FUNCTION* func = NULL,
	typename Allocator = BAlloc&lt;Ty&gt;
&gt;
class FirstUse : public  Implementation&lt;Ty, n, func&gt;,
				 private Allocator
{
	[...]
};
</code></pre>
<p>Jetzt soll an folgende Klasse ein Typ der sich an &quot;Interface&quot; orientiert<br />
übergeben werden. Es soll eine Instanz dieses Tps gebildet werden können.<br />
Mein Problem ist jedoch, dass Interface allein nur die halbe Miete ist.<br />
Es soll natürlich die Möglichkeit bestehen z.B. &quot;FirstUse&quot; zu verwenden.<br />
Aber wie? Da fehlen dann ja Parameter?</p>
<pre><code class="language-cpp">template&lt;
	class  Ty,
	size_t n, 
	class  Interface = Interface&lt;Ty&gt;
&gt;
class Class
{
	[...]
};
</code></pre>
<p>Hat da jemand vielleicht einen netten Vorschlag?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255392/template-ableitungsproblem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 01:26:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255392.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Nov 2009 09:09:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Ableitungsproblem on Mon, 30 Nov 2009 09:09:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Denkproblemchen. Ich poste einfach erstmal den Code. Es geht<br />
hier primär um die Hierarchie und das Design; nicht um den Inhalt.</p>
<pre><code class="language-cpp">#ifdef MSC_VER
#	define NOVTABLE	__declspec(novtable)
#	define ABSTRACT abstract
#else
	#define NOVTABLE
	#define ABSTRACT
#endif

template&lt;
	class  Ty,
	size_t n
&gt;
struct NOVTABLE Member ABSTRACT
{
protected:
	enum {Elem = n};
	mutable Ty memb[n];
};

template&lt;
	class Ty,
&gt;
struct NOVTABLE Member&lt;Ty, 0&gt; ABSTRACT
{
protected:
	size_t Elem;
	mutable Ty* memb;
};

template&lt;
	class Ty
&gt;
class NOVTABLE Interface ABSTRACT
{
protected:
	enum {elSize = sizeof(Ty)};

public:
	virtual func1() = 0;
	virtual func2() = 0;
	virtual func3() = 0;
};

template&lt;
	class  Ty,
	size_t n,
	typename SPECIAL_FUNC&lt;_Ty&gt;::FUNCTION* func = NULL
&gt;
class NOVTABLE Implementation ABSTRACT
	: public Member&lt;Ty, n&gt;,
	  public Interface&lt;Ty&gt;,
	  public Mehr&lt;Ty, n, func&gt;
{
public:
	virtual func1() {}
	virtual func2() {}
	virtual func3() {}
};

template&lt;
	class  Ty,
	size_t n,
	typename SPECIAL_FUNC&lt;_Ty&gt;::FUNCTION* func = NULL,
	typename Allocator = BAlloc&lt;Ty&gt;
&gt;
class FirstUse : public  Implementation&lt;Ty, n, func&gt;,
				 private Allocator
{
	[...]
};
</code></pre>
<p>Jetzt soll an folgende Klasse ein Typ der sich an &quot;Interface&quot; orientiert<br />
übergeben werden. Es soll eine Instanz dieses Tps gebildet werden können.<br />
Mein Problem ist jedoch, dass Interface allein nur die halbe Miete ist.<br />
Es soll natürlich die Möglichkeit bestehen z.B. &quot;FirstUse&quot; zu verwenden.<br />
Aber wie? Da fehlen dann ja Parameter?</p>
<pre><code class="language-cpp">template&lt;
	class  Ty,
	size_t n, 
	class  Interface = Interface&lt;Ty&gt;
&gt;
class Class
{
	[...]
};
</code></pre>
<p>Hat da jemand vielleicht einen netten Vorschlag?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815287</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Mon, 30 Nov 2009 09:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Ableitungsproblem on Mon, 30 Nov 2009 10:12:12 GMT]]></title><description><![CDATA[<p>Es ist erstmal völlig unklar was du da versuchst zu tun. Das hast du scheinbar vergessen zu erwähnen. Und welche Parameter meinst du fehlen da? Es wird nicht wirklich klar was du machen möchtest.<br />
Gib uns am Besten nochmal den allernötigsten Code den du hast. Nicht mehr, weil mehr einfach nur verwirrt. Den MSVC-Spezialkram kannst du auch erstmal weglassen, der verkompliziert das Verständnis unnötig. Und nimm am Besten den Code den du selbst dort hast, der hier scheint irgendwie zusammenkopiert zu sein, da sind überflüssige Kommata, teils _Ty, teils Ty, und erkläre was du erreichen möchtest mit dem jeweiligen Code.<br />
Mit dem was du uns da vorgelegt hast ist nicht klar was das alles überhaupt soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815312</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 Nov 2009 10:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Ableitungsproblem on Mon, 30 Nov 2009 10:36:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;
	class  Ty,
	size_t n
&gt;
struct Member
{
protected:
	enum {Elem = n};
	mutable Ty memb[n];
};

template&lt;
	class Ty,
&gt;
struct Member&lt;Ty, 0&gt; 
{
protected:
	size_t Elem;
	mutable Ty* memb;
};

template&lt;
	class Ty
&gt;
class Interface
{
protected:
	enum {elSize = sizeof(Ty)};

public:
	virtual func1() = 0;
	virtual func2() = 0;
	virtual func3() = 0;
};

template&lt;
	class  Ty,
	size_t n,
	typename SPECIAL_FUNC&lt;Ty&gt;::FUNCTION* func = NULL
&gt;
class Implementation 
	: public Member&lt;Ty, n&gt;,
	  public Interface&lt;Ty&gt;,
	  public Mehr&lt;Ty, n, func&gt;
{
public:
	virtual func1() {}
	virtual func2() {}
	virtual func3() {}
};

template&lt;
	class  Ty,
	size_t n,
	typename SPECIAL_FUNC&lt;_Ty&gt;::FUNCTION* func = NULL,
	typename Allocator = BAlloc&lt;Ty&gt;
&gt;
class FirstUse : public  Implementation&lt;Ty, n, func&gt;,
				 private Allocator
{
	[...]
};
</code></pre>
<p>Also,<br />
ich habe ein Interface für eine spezielle Klasse deklariert. Alle Ableitungen dieser Klasse verfügen also<br />
über die Methoden dieser Schnittstelle.<br />
Es gibt jedoch eine Unterscheidung zwischen den Membern (der Zugriff bleibt aber gleich).</p>
<p>Die Implementation Klasse implementiert die zuvor virtuelle Methoden. &quot;FirstUse&quot; ist die erste<br />
instanzierbare Klasse, welche von Implementation ableitet.</p>
<p>So, dass ist alles wunderbar. Jetzt möchte ich jedoch eine weitere Template-Klasse erschaffen, die eben jene<br />
Klasse oben als Member erhält. Die Frage ist jetzt bei mir, wie ich das machen soll?</p>
<p>Ich könnte beispielsweiße folgendes &quot;verlangen&quot;:</p>
<pre><code class="language-cpp">template&lt;
	class Ty
	class MemberTyp = Interface&lt;Ty&gt;
&gt;
class Class
{
private:
	MemberTyp&lt;Ty&gt; Memb;
}
</code></pre>
<p>So, dann würde ich implizit einen Typ erwarten, der sich an Interface orientiert. Mein Problem ist aber, dass auf diese<br />
Art die Klasse &quot;FirstUse&quot; nicht als &quot;MemberTyp&quot; möglich wäre; soll es aber.</p>
<p>Mein Problem ist ganz einfach, dass sich die erste echte Ableitung von Interface (FirstUse) nicht an deren TemplateParameter<br />
hält, sondern mehr hat.</p>
<p>Vielleicht sollte ich das Interface einfach auf dide Parameter von FirstUse abwandeln, ich hatte aber eigentlich geplant<br />
mehrere Ableitung a la FirstUse zu haben, die durchaus weitere Template-Parameter haben. Die halten sich aber alle an die<br />
Konventionen von Interface.</p>
<p>mmh, ich hoffe dass es jetzt etwas verständlicher wird <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/1815324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815324</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Mon, 30 Nov 2009 10:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Ableitungsproblem on Mon, 30 Nov 2009 11:10:45 GMT]]></title><description><![CDATA[<p>Suchst du sowas?</p>
<pre><code class="language-cpp">template &lt; typename Tx &gt;
struct Base
{
    Tx x;
};

template &lt; typename Tx, typename Ty&gt;
struct Derived : public Base&lt;Tx&gt;
{
    Ty y;
};

template &lt; typename Bx, typename T = Base&lt;Bx&gt; &gt;
struct Aggregate
{
    T mem;
};

int main()
{
    Aggregate&lt;int&gt; agg1;
    Aggregate&lt;int, Derived&lt;int, int&gt; &gt; agg2;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1815341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815341</guid><dc:creator><![CDATA[sowas aber auch...]]></dc:creator><pubDate>Mon, 30 Nov 2009 11:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Ableitungsproblem on Mon, 30 Nov 2009 11:35:39 GMT]]></title><description><![CDATA[<p>Okay, vergesst es Jungs <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="😉"
    /><br />
Eine Woche Schweinegrippe hat mir also doch geschadet ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815348</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Mon, 30 Nov 2009 11:35:39 GMT</pubDate></item></channel></rss>