<?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[Methoden-Pointer in Klasse]]></title><description><![CDATA[<p>Hallo!</p>
<p>Kann mir jemand einen Tipp geben, wieso der Compiler hier meckert? Das Problem liegt offenbar in der get() methode bei der Zuweisung der destroy() methode an den Funktionspointer. Ich seh' einfach den Fehler nicht.</p>
<p>Danke!</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

class variant
{    
	public:
		variant()
		{
			m_data = NULL;
			m_destructor = NULL;
			}

		~variant()
		{
			m_destructor();
			}

		template &lt;class T&gt;
		void set(const T &amp;obj)
		{
			m_destructor();
			m_data = new T;
			*(T*)m_data = obj;
			m_destructor = destroy&lt;T&gt;;
			}

		template &lt;class T&gt;
		T get()
		{
			return *(T*)m_data;
			}

	private:
		template &lt;class T&gt;
		void destroy()
		{
			delete((T*)m_data);
			}

		void (*m_destructor)();
		void *m_data;
	};

using namespace std;

int main(int argc, char *argv[])
{

    variant x;

    x.set(string(&quot;hallo!&quot;));

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/170266/methoden-pointer-in-klasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 00:57:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170266.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Jan 2007 18:57:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methoden-Pointer in Klasse on Sat, 13 Jan 2007 18:57:29 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Kann mir jemand einen Tipp geben, wieso der Compiler hier meckert? Das Problem liegt offenbar in der get() methode bei der Zuweisung der destroy() methode an den Funktionspointer. Ich seh' einfach den Fehler nicht.</p>
<p>Danke!</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

class variant
{    
	public:
		variant()
		{
			m_data = NULL;
			m_destructor = NULL;
			}

		~variant()
		{
			m_destructor();
			}

		template &lt;class T&gt;
		void set(const T &amp;obj)
		{
			m_destructor();
			m_data = new T;
			*(T*)m_data = obj;
			m_destructor = destroy&lt;T&gt;;
			}

		template &lt;class T&gt;
		T get()
		{
			return *(T*)m_data;
			}

	private:
		template &lt;class T&gt;
		void destroy()
		{
			delete((T*)m_data);
			}

		void (*m_destructor)();
		void *m_data;
	};

using namespace std;

int main(int argc, char *argv[])
{

    variant x;

    x.set(string(&quot;hallo!&quot;));

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1209350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209350</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 13 Jan 2007 18:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden-Pointer in Klasse on Sat, 13 Jan 2007 19:01:24 GMT]]></title><description><![CDATA[<p>Was sagt der Compiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209352</guid><dc:creator><![CDATA[SpiderFromMars]]></dc:creator><pubDate>Sat, 13 Jan 2007 19:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden-Pointer in Klasse on Sat, 13 Jan 2007 19:09:55 GMT]]></title><description><![CDATA[<p>SpiderFromMars schrieb:</p>
<blockquote>
<p>Was sagt der Compiler?</p>
</blockquote>
<p>30 C:\My Documents\main.cpp no matches converting function `destroy' to type `void (*)()'<br />
error C:\My Documents\main.cpp:42 candidates are: template&lt;class T&gt; void variant::destroy()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209357</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 13 Jan 2007 19:09:55 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden-Pointer in Klasse on Sat, 13 Jan 2007 20:07:01 GMT]]></title><description><![CDATA[<p>variant::destroy ist eine nicht-statische Memberfunktion, also benötigst du einen Zeiger auf Memberfunktionen. also</p>
<pre><code class="language-cpp">void (variant::*m_destructor)();
</code></pre>
<p>und dann</p>
<pre><code class="language-cpp">template &lt;class T&gt;
        void set(const T &amp;obj)
        {
            if ( m_destructor != NULL )
                ( this-&gt;*m_destructor )();
            m_data = new T( obj );
            m_destructor = &amp;destroy&lt;T&gt;;
            }
</code></pre>
<p>Alternativ könnte destroy auch eine statische oder freie Funktion sein (das ist möglicherweise flexibler):</p>
<pre><code class="language-cpp">void (*m_destructor)(void*);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1209370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209370</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 13 Jan 2007 20:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden-Pointer in Klasse on Sat, 13 Jan 2007 20:49:11 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>variant::destroy ist eine nicht-statische Memberfunktion, also benötigst du einen Zeiger auf Memberfunktionen. also</p>
<pre><code class="language-cpp">void (variant::*m_destructor)();
</code></pre>
<p>und dann</p>
<pre><code class="language-cpp">template &lt;class T&gt;
        void set(const T &amp;obj)
        {
            if ( m_destructor != NULL )
                ( this-&gt;*m_destructor )();
            m_data = new T( obj );
            m_destructor = &amp;destroy&lt;T&gt;;
            }
</code></pre>
<p>Alternativ könnte destroy auch eine statische oder freie Funktion sein (das ist möglicherweise flexibler):</p>
<pre><code class="language-cpp">void (*m_destructor)(void*);
</code></pre>
</blockquote>
<p>Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> Das hat funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209386</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 13 Jan 2007 20:49:11 GMT</pubDate></item></channel></rss>