<?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[Kompilerfehler bei versuch eines ungültigen Aurufes, Klasse trotzdem kompilierbar]]></title><description><![CDATA[<p>Hallo.</p>
<p>Gleich eines vorweg:<br />
Ich weiß nicht ob es überhaupt möglich ist den Text zu kapieren *g*, vielleicht sagt der Code mehr aus.</p>
<p>Ich will ein Wrapper Klassentemplate schreiben, dass T 'wrappt'.<br />
Allerdings sollen gewisste Operationen nur dann erlaubt sein, wenn das entsprechende T es auch unterstützt, man soll eine Instanz des Wrappers aber auch instanzieren können, falls die angegebene Klasse T die Operationen nur teilweise unterstütz. Versucht man dann unerlaubte Operationen auszuführen soll ein Kompilerfehler auftreten, versucht man es nicht, d.h. versucht man nur erlaubte Funktionen auszuführen soll alles gut gehn ohne Kompilerfehler.</p>
<p>Eine Lösung die Laufzeitfehler verursacht hatte ich bereits gefunden, allerdings suche ich eine die den Fehler schon zur Kompilezeit findet.</p>
<p>Ich kann es nicht gut in Worte fassen, schaut euch einfach den Code an und falls jemand versteht was ich meine wäre ich über eine Antwort dankbar <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>
<pre><code class="language-cpp">// Klasse, die a und b enthält
class AB
{
public:
	void a();
	void b();
};

// Klasse, die nur a enthält
class A
{
public:
	void a();
};

// Klasse, die nur B enthält
class B
{
public:
	void b();
};

// Klasse, die nichts von beiden enthält
class E
{
};

// Klassen-Template, die als eine art Wrapper-Klasse agiert
// allerdings sind nur Operationen erlaubt, die auch der Typ T unterstütz,
// falls unerlaubte Operationen aufgerufen werden (wie wb bei W&lt;A&gt;) dann soll ein Fehler zur Kompilerzeit auftreten
// Ansonsten soll es kompilierbar sein.

template&lt;class T&gt;
class W
{
public:
	T object;

public:
	// Wrapper Funktion für a
	void wa()
	{
		// ???
		object.a();
	}

	// Wrapper Funktion für b
	void wb()
	{
		// ???
		object.b();
	}
};

// Main
int main()
{
	W&lt;AB&gt; w1;

	w1.wa(); //ok
	w2.wb(); //ok

	W&lt;A&gt; w2;

	w2.wa(); //ok
	w2.wb(); // hier möchte ich gerne einen kompiler-fehler, der user darf wb nicht aufrufen da A kein b enthält

	W&lt;B&gt; w3;

	w3.wa(); // hier möchte ich gerne einen kompiler-fehler, der user darf wa nicht aufrufen da B kein a enthält
	w3.wb(); // ok

	W&lt;E&gt; w2;

	w4.wa(); // hier möchte ich gerne einen kompiler-fehler, der user darf wa nicht aufrufen da E kein a enthält
	w4.wb(); // hier möchte ich gerne einen kompiler-fehler, der user darf wb nicht aufrufen da E kein b enthält

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/159305/kompilerfehler-bei-versuch-eines-ungültigen-aurufes-klasse-trotzdem-kompilierbar</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 14:42:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159305.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Sep 2006 17:41:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kompilerfehler bei versuch eines ungültigen Aurufes, Klasse trotzdem kompilierbar on Wed, 13 Sep 2006 17:41:56 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Gleich eines vorweg:<br />
Ich weiß nicht ob es überhaupt möglich ist den Text zu kapieren *g*, vielleicht sagt der Code mehr aus.</p>
<p>Ich will ein Wrapper Klassentemplate schreiben, dass T 'wrappt'.<br />
Allerdings sollen gewisste Operationen nur dann erlaubt sein, wenn das entsprechende T es auch unterstützt, man soll eine Instanz des Wrappers aber auch instanzieren können, falls die angegebene Klasse T die Operationen nur teilweise unterstütz. Versucht man dann unerlaubte Operationen auszuführen soll ein Kompilerfehler auftreten, versucht man es nicht, d.h. versucht man nur erlaubte Funktionen auszuführen soll alles gut gehn ohne Kompilerfehler.</p>
<p>Eine Lösung die Laufzeitfehler verursacht hatte ich bereits gefunden, allerdings suche ich eine die den Fehler schon zur Kompilezeit findet.</p>
<p>Ich kann es nicht gut in Worte fassen, schaut euch einfach den Code an und falls jemand versteht was ich meine wäre ich über eine Antwort dankbar <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>
<pre><code class="language-cpp">// Klasse, die a und b enthält
class AB
{
public:
	void a();
	void b();
};

// Klasse, die nur a enthält
class A
{
public:
	void a();
};

// Klasse, die nur B enthält
class B
{
public:
	void b();
};

// Klasse, die nichts von beiden enthält
class E
{
};

// Klassen-Template, die als eine art Wrapper-Klasse agiert
// allerdings sind nur Operationen erlaubt, die auch der Typ T unterstütz,
// falls unerlaubte Operationen aufgerufen werden (wie wb bei W&lt;A&gt;) dann soll ein Fehler zur Kompilerzeit auftreten
// Ansonsten soll es kompilierbar sein.

template&lt;class T&gt;
class W
{
public:
	T object;

public:
	// Wrapper Funktion für a
	void wa()
	{
		// ???
		object.a();
	}

	// Wrapper Funktion für b
	void wb()
	{
		// ???
		object.b();
	}
};

// Main
int main()
{
	W&lt;AB&gt; w1;

	w1.wa(); //ok
	w2.wb(); //ok

	W&lt;A&gt; w2;

	w2.wa(); //ok
	w2.wb(); // hier möchte ich gerne einen kompiler-fehler, der user darf wb nicht aufrufen da A kein b enthält

	W&lt;B&gt; w3;

	w3.wa(); // hier möchte ich gerne einen kompiler-fehler, der user darf wa nicht aufrufen da B kein a enthält
	w3.wb(); // ok

	W&lt;E&gt; w2;

	w4.wa(); // hier möchte ich gerne einen kompiler-fehler, der user darf wa nicht aufrufen da E kein a enthält
	w4.wb(); // hier möchte ich gerne einen kompiler-fehler, der user darf wb nicht aufrufen da E kein b enthält

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1136866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136866</guid><dc:creator><![CDATA[manzooma]]></dc:creator><pubDate>Wed, 13 Sep 2006 17:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilerfehler bei versuch eines ungültigen Aurufes, Klasse trotzdem kompilierbar on Wed, 13 Sep 2006 17:56:53 GMT]]></title><description><![CDATA[<p>Hm, halte mich bitte nicht für spiessig, aber der Code tut beim compilieren doch genau das was du verlangst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136877</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 13 Sep 2006 17:56:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilerfehler bei versuch eines ungültigen Aurufes, Klasse trotzdem kompilierbar on Wed, 13 Sep 2006 18:10:25 GMT]]></title><description><![CDATA[<p>^^ gerade eben getestet, du hast recht.</p>
<p>das problem war, dass ich dabei war eine klasse für properties zu schreiben und um die sache ins forum zu stellen, wollte ich ein einfacheres beispiel machen.<br />
bin davon ausgegangen dass das einfache beispiel die selben probleme ausweißt wie meines.</p>
<p>^^ allerdings hatte ich einen sehr dummen fehler gemacht, ich hatte nämlich nicht a und b, sondern get und set, und nicht wa und wb, sondern operator= und operator T. Im Operator= hab ich ausversehen beide, sowohl get als auch set benutzt und somit einen Fehler bekommen <sup>_</sup>''. Wie ich das übersehn konnte: kp</p>
<p>Danke für deine Hilfe, trotzdem <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/1136888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136888</guid><dc:creator><![CDATA[manzooma]]></dc:creator><pubDate>Wed, 13 Sep 2006 18:10:25 GMT</pubDate></item></channel></rss>