<?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[events mittels basis-klasse signalisieren...]]></title><description><![CDATA[<p>Ist folgendes definiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

typedef int Tfoo;

template&lt;typename IMPL&gt;
struct base
{
  base(Tfoo foo)
  : foo(foo)
  {
    reinterpret_cast&lt;IMPL*&gt;(this)-&gt;on_connect();
  }

  ~base()
  {
    reinterpret_cast&lt;IMPL*&gt;(this)-&gt;on_disconnect();
  }
private:
  Tfoo foo;
};

struct impl : base&lt;impl&gt;
{
private:
  typedef base&lt;impl&gt; base_type;
public:
  impl(Tfoo foo) : base_type(foo) {}

  void on_connect()
  {
    std::cout &lt;&lt; &quot;hello world!&quot; &lt;&lt; std::endl;
  }

  void on_disconnect()
  {
    std::cout &lt;&lt; &quot;good bye world!&quot; &lt;&lt; std::endl;
  }
};

int main()
{
	{
		Tfoo x = Tfoo();
		impl test(x);
	}

	std::cin.get();
}
</code></pre>
<p>Vermutlich ist der Aufruf im DTor definiert und der im CTor undefiniert(da impl noch nicht fertig konstruiert ist), richtig!?<br />
Aber da es imho nur dieser Aufruf ist, der schief gehen wird(bzw. könnte), könnte man auch in impl im dtor das <code>on_disconnect</code> aufrufen und es wäre alles in Ordnung!?</p>
<p>Und ist es ein zumindest halbwegs sinnvoller Ansatz, um Verbindungs-Events zu signalisieren?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256118/events-mittels-basis-klasse-signalisieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 17:25:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256118.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Dec 2009 13:47:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to events mittels basis-klasse signalisieren... on Tue, 08 Dec 2009 13:47:08 GMT]]></title><description><![CDATA[<p>Ist folgendes definiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

typedef int Tfoo;

template&lt;typename IMPL&gt;
struct base
{
  base(Tfoo foo)
  : foo(foo)
  {
    reinterpret_cast&lt;IMPL*&gt;(this)-&gt;on_connect();
  }

  ~base()
  {
    reinterpret_cast&lt;IMPL*&gt;(this)-&gt;on_disconnect();
  }
private:
  Tfoo foo;
};

struct impl : base&lt;impl&gt;
{
private:
  typedef base&lt;impl&gt; base_type;
public:
  impl(Tfoo foo) : base_type(foo) {}

  void on_connect()
  {
    std::cout &lt;&lt; &quot;hello world!&quot; &lt;&lt; std::endl;
  }

  void on_disconnect()
  {
    std::cout &lt;&lt; &quot;good bye world!&quot; &lt;&lt; std::endl;
  }
};

int main()
{
	{
		Tfoo x = Tfoo();
		impl test(x);
	}

	std::cin.get();
}
</code></pre>
<p>Vermutlich ist der Aufruf im DTor definiert und der im CTor undefiniert(da impl noch nicht fertig konstruiert ist), richtig!?<br />
Aber da es imho nur dieser Aufruf ist, der schief gehen wird(bzw. könnte), könnte man auch in impl im dtor das <code>on_disconnect</code> aufrufen und es wäre alles in Ordnung!?</p>
<p>Und ist es ein zumindest halbwegs sinnvoller Ansatz, um Verbindungs-Events zu signalisieren?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1819565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1819565</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 08 Dec 2009 13:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to events mittels basis-klasse signalisieren... on Tue, 08 Dec 2009 14:05:04 GMT]]></title><description><![CDATA[<p>Sowohl Ctor als auch Dtor sind undefiniert:<br />
Base-Ctor (oh, aber noch kein derived da) -&gt; Derived-Ctor ... Derived-Dtor -&gt; Base-Dtor (oh, aber kein Derived mehr da)</p>
<p>Wieso nicht mit einem Scopeguard:</p>
<pre><code class="language-cpp">template&lt;typename Guarded&gt;
class ScopeGuard
{
public:
   ScopeGuard(Guarded &amp; g) : guarded(g) { guarded.on_connect(); }
   ~ScopeGuard(){ guarded.on_disconnect(); }
private:
   Guarded &amp; guarded;
};

int main()
{
    {
        Tfoo x = Tfoo();
        impl test(x); //jetzt ohne CRTP-Base
        ScopeGuard guard(test);
    }

    std::cin.get();
}
</code></pre>
<p>PS: Okay, ScopeGuard sollte bei Dir vielleicht AutoConnect oder so heißen. :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1819572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1819572</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 08 Dec 2009 14:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to events mittels basis-klasse signalisieren... on Tue, 08 Dec 2009 14:06:25 GMT]]></title><description><![CDATA[<p>klingt eigtl gar nicht so schlecht - aber das ganze kann man nicht so einfach automatisieren...</p>
<p>mein ziel wäre es halt, dass man nur eine klasse für die verbindung schreiben muss und dann automatisch fkt. wie on_read, on_disconnect, on_connect aufgerufen werden würden...<br />
das würde zwar auch mit runtime-polymorphie gehen, aber die ist hier ja eigtl nicht wirklich nötig - also wollt ich sie auch nicht unbedingt verwenden...</p>
<p>aber da der server-socket ja eh den verbindungstypen als template-argument bekommt, könnte ich dort zumindest das on_connect aufrufen, nachdem die verbindung erstellt wurde - nur die disconnect-notification bekommt man dort ja nicht mehr - also müsste man im dtor noch von hand on_disconnect aufrufen...<br />
oder denk ich gerade zu kompliziert bzw. einfach falsch? ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1819575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1819575</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 08 Dec 2009 14:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to events mittels basis-klasse signalisieren... on Tue, 08 Dec 2009 19:15:39 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Aber da es imho nur dieser Aufruf ist, der schief gehen wird(bzw. könnte)</p>
</blockquote>
<p>Da wäre ich mir nicht zu sicher. Beim <code>reinterpret_cast</code> habe ich kein gutes Gefühl, besonders wenn ein <code>static_cast</code> eher passt – mal ganz ungeachtet der Frage, ob das abgeleitete Objekt dann bereits konstruiert ist.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>das würde zwar auch mit runtime-polymorphie gehen, aber die ist hier ja eigtl nicht wirklich nötig - also wollt ich sie auch nicht unbedingt verwenden...</p>
</blockquote>
<p>Würde es wirklich? Du hättest dann einen virtuellen Aufruf im Konstruktor, das ist ebenso böse.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>klingt eigtl gar nicht so schlecht - aber das ganze kann man nicht so einfach automatisieren...</p>
</blockquote>
<p>Oder wenn du Tachyons <code>AutoConnect</code> zur Hauptkapselklasse ausbauen würdest? Sodass man gar keinen direkten Zugriff mehr auf <code>impl</code> hat (ein Name wie &quot;impl&quot; legt das ja auch nahe ;))? Eventuell in Kombination mit einer Factory? Nur ein paar Gedanken...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1819779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1819779</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 08 Dec 2009 19:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to events mittels basis-klasse signalisieren... on Tue, 08 Dec 2009 19:48:13 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>klingt eigtl gar nicht so schlecht - aber das ganze kann man nicht so einfach automatisieren...</p>
</blockquote>
<p>Oder wenn du Tachyons <code>AutoConnect</code> zur Hauptkapselklasse ausbauen würdest? Sodass man gar keinen direkten Zugriff mehr auf <code>impl</code> hat (ein Name wie &quot;impl&quot; legt das ja auch nahe ;))? Eventuell in Kombination mit einer Factory? Nur ein paar Gedanken...</p>
</blockquote>
<p>Jopp - das ist mir danach dann auch eingefallen - das ist aber schon wieder so viel Arbeit das alles zu ändern(und ab und an muss man da ja auch noch nachdenken &gt;.&lt;), dass ich jetzt erst mal nen paar Stunden anderweitig Zeit tot schlag xD</p>
<p>ty^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1819796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1819796</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 08 Dec 2009 19:48:13 GMT</pubDate></item></channel></rss>