<?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[Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt;]]></title><description><![CDATA[<p>hi</p>
<p>Ich möchte in einer Headerfile die Abhängigkeit zu &lt;boost/function.hpp&gt; entfernen.<br />
Die Memberfunktion</p>
<pre><code class="language-cpp">setCallBack(boost::function&lt;int ()&gt; aCallBack);
</code></pre>
<p>nimmt eine boost::function entgegen und speichert die Funktionsreferenz in dem pimpl.</p>
<p>Kann mir jemand einen Tip geben, wie ich den Parameter für diese Funktion vorwärts-deklariere?</p>
<p>Ich hab es schon mit vielen verschiedenen typedefs versucht, aber es wollte einfach nicht klappen.</p>
<p>Vielen Danke!</p>
<p>~Martin</p>
<p>//-----------<br />
// MyClass.h<br />
//-----------</p>
<pre><code class="language-cpp">#include &lt;boost/function.hpp&gt;   // I want to remove this dependency

class MyClass
{
public:
	void setCallBack(boost::function&lt;int ()&gt; aCallBack);
private:
	MyClassImpl *m_Impl;

}
</code></pre>
<p>//-----------<br />
// MyClass.cpp<br />
//-----------</p>
<pre><code class="language-cpp">#include &quot;MyClass.h&quot;
#include &lt;boost/function.hpp&gt;

class MyClassImpl
{
public:
	MyClassImpl()  {};
	~MyClassImpl()  {};

	boost::function&lt;int ()&gt; aCallBack;
};

MyClass::MyClass()
{
	m_Impl = new MyClassImpl();
}

MyClass::~MyClass()
{
	delete m_Impl;
}

void MyClass::setCallBack(boost::function&lt;int ()&gt; aCallBack)
{
	m_Impl-&gt;callBack = aCallBack;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/254051/forward-deklaration-von-parameter-vom-typ-boost-function-lt-int-gt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 05:08:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254051.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Nov 2009 23:58:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Tue, 10 Nov 2009 23:58:32 GMT]]></title><description><![CDATA[<p>hi</p>
<p>Ich möchte in einer Headerfile die Abhängigkeit zu &lt;boost/function.hpp&gt; entfernen.<br />
Die Memberfunktion</p>
<pre><code class="language-cpp">setCallBack(boost::function&lt;int ()&gt; aCallBack);
</code></pre>
<p>nimmt eine boost::function entgegen und speichert die Funktionsreferenz in dem pimpl.</p>
<p>Kann mir jemand einen Tip geben, wie ich den Parameter für diese Funktion vorwärts-deklariere?</p>
<p>Ich hab es schon mit vielen verschiedenen typedefs versucht, aber es wollte einfach nicht klappen.</p>
<p>Vielen Danke!</p>
<p>~Martin</p>
<p>//-----------<br />
// MyClass.h<br />
//-----------</p>
<pre><code class="language-cpp">#include &lt;boost/function.hpp&gt;   // I want to remove this dependency

class MyClass
{
public:
	void setCallBack(boost::function&lt;int ()&gt; aCallBack);
private:
	MyClassImpl *m_Impl;

}
</code></pre>
<p>//-----------<br />
// MyClass.cpp<br />
//-----------</p>
<pre><code class="language-cpp">#include &quot;MyClass.h&quot;
#include &lt;boost/function.hpp&gt;

class MyClassImpl
{
public:
	MyClassImpl()  {};
	~MyClassImpl()  {};

	boost::function&lt;int ()&gt; aCallBack;
};

MyClass::MyClass()
{
	m_Impl = new MyClassImpl();
}

MyClass::~MyClass()
{
	delete m_Impl;
}

void MyClass::setCallBack(boost::function&lt;int ()&gt; aCallBack)
{
	m_Impl-&gt;callBack = aCallBack;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1806303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806303</guid><dc:creator><![CDATA[butze_124]]></dc:creator><pubDate>Tue, 10 Nov 2009 23:58:32 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 00:06:36 GMT]]></title><description><![CDATA[<p>Die obligatorische Gegenfrage: Warum?</p>
<p>Und die Antwort auf deine Frage: Man kann da vielleicht was Monströses mit templates zusammenfrickeln um das zu erreichen, aber erstmal will ich wissen, warum man sich die zusätzliche Mühe machen sollte, um den vorhandenen Code zu verunstalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806304</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 11 Nov 2009 00:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 09:22:26 GMT]]></title><description><![CDATA[<p>Den Grund kann ich mir schon denken. Er möchte die Header-Datei boost-frei bekommen, um sie evtl. für andere Projekte anzubieten, welche nicht auf boost-basieren sollen/können.</p>
<p>Normalerweise kann man keine template-Klassen vorwärts-deklarieren (bzw. nur mit sehr großem Aufwand, s. z.B. &lt;iosfwd&gt;).</p>
<p>Mir kommt dann nur die explizite Änderung der setCallback-Funktion in den Sinn, d.h.</p>
<pre><code class="language-cpp">void setCallBack(int (*aCallBack)());
</code></pre>
<p>Dann entfällt aber auch die Allgemeingültigkeit bzgl. boost-Function.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806355</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 11 Nov 2009 09:22:26 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 09:27:26 GMT]]></title><description><![CDATA[<p>hi SeppJ</p>
<p>Ich schreibe momentan eine Library. Die Methode &quot;setCallBack(boost::function&lt;int ()&gt; aCallBack)&quot; wird nur innerhalb der Lib benutzt, aber einige andere Funktionen der Klasse MyLib müssen nach außen exportiert werden.</p>
<p>Deshalb komme ich nicht drum herum die &quot;MyClass.h&quot; mit zu liefern. Die Abhänigkeit darin zu boost stört dann sehr, weil dann ja der Benutzer der Lib boost ebenfalls im IncludePfad haben muss.</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806357</guid><dc:creator><![CDATA[butze_124]]></dc:creator><pubDate>Wed, 11 Nov 2009 09:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 09:41:51 GMT]]></title><description><![CDATA[<p>Naja, man könnte theoretisch ja auch <code>tr1::function</code> benutzen, aber ich weiß nicht, wie viele Compiler das bereitstellen. Hundert-prozentig sicher ist das auch nicht.</p>
<p>Wieso brauchst du gerade <code>function</code> ? Müssen die Rückgabewerte mit in andere konvertierbar sein? Denn sonst würde es ein roher Funktionszeiger schon tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806358</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 11 Nov 2009 09:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 10:49:26 GMT]]></title><description><![CDATA[<p>butze_124 schrieb:</p>
<blockquote>
<p>Die Abhänigkeit darin zu boost stört dann sehr, weil dann ja der Benutzer der Lib boost ebenfalls im IncludePfad haben muss.</p>
</blockquote>
<p>Was nun wirklich kein Weltuntergang ist! Deine Lib muß der User schließlich auch in den Include Path mit eintragen, oder? Eben! Dann kann er auch gleich noch Boost mit eintragen.</p>
<p>Notfalls kann man ja die nötigen Boost Libs auch selber mit ausliefern, so das der User nichts für Boost eintragen muß. Das Boost-Tool bcp.exe[1] hilft da ein wenig.</p>
<p>[1] <a href="http://www.boost.org/doc/libs/1_40_0/tools/bcp/bcp.html" rel="nofollow">http://www.boost.org/doc/libs/1_40_0/tools/bcp/bcp.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806385</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 11 Nov 2009 10:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 13:30:00 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>die Boost-Includes sollen nicht mitgeliefert werden. Ist auch nur nervig, wenn man sich als Anwender auch noch um solche Include kümmern muss. Da ich bislang alle anderen Abhängigkeiten aus meinem Programm entfernt habe, will ich es jetzt auch zuende bringen <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>
<blockquote>
<p>Naja, man könnte theoretisch ja auch tr1::function benutzen, aber ich weiß nicht, wie viele Compiler das bereitstellen. Hundert-prozentig sicher ist das auch nicht.</p>
</blockquote>
<p>Dann müsste der Anwender wieder sicherstellen, dass er tr1-Libraries bei sich installiert hat.</p>
<blockquote>
<p>Mir kommt dann nur die explizite Änderung der setCallback-Funktion in den Sinn, d.h.</p>
<pre><code>C/C++ Code:
void setCallBack(int (*aCallBack)());
</code></pre>
<p>Dann entfällt aber auch die Allgemeingültigkeit bzgl. boost-Function.</p>
</blockquote>
<p>Seit heute Morgen versuche ich jetzt schon boost::function durch &quot;einfache&quot; c++ FunctionPointer zu ersetzen. Aber so richtig bekomme ich das nicht hin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Nach vielen Syntaxfehlern und googlen bin ich auf die Seite</p>
<p><a href="http://www.codeproject.com/KB/cpp/FastDelegate.aspx" rel="nofollow">http://www.codeproject.com/KB/cpp/FastDelegate.aspx</a></p>
<p>gestoßen, die sich etwas mit meinen Problemen befasst.</p>
<p>Beim Threaderstellen habe ich auch einige Details weggelassen. Mein Problem ist leider etwas komplexer, da mit Vererbung gearbeitet wird und eine Aggregationsklasse entsprechende Memberfunktionen aufrufen soll.</p>
<p>aktuelle (funktionierende) Architektur mit boost::function (CallBack jetzt ohne parameter)</p>
<pre><code class="language-cpp">class BaseClass
{
public:
	virtual void interruptHandler() = 0;		//abstrakte Funktionsdeklaration
	InterfaceClass *m_pIntf;	// Aggregation zur Interfaceklasse
}

classA1 : Base
{
public:
	classA1() {m_pIntf-&gt;setInterruptHandler(boost::bind(&amp;classA1::interruptHandler, this))};  //Konstruktor setzt den Callback
	virtual void interruptHandler() { //do something };
}

classA2 : Base
{
public:
	classA2() {m_pIntf-&gt;setInterruptHandler(boost::bind(&amp;classA2::interruptHandler, this))};  //Konstruktor setzt den Callback
	virtual void interruptHandler() { //do something };
}

class InterfaceClass
{
public:
	void setCallBack(boost::function&lt;void ()&gt; callBack) {interruptHandler = callBack};  // speichert den callBack lokal ab in der Variablen interruptHandler

private:
	foo() {interruptHandler()};			//foo() soll entsprechende interruptHandler aus ClassA1 oder ClassA2 aufrufen
	boost::function&lt;void ()&gt; interruptHandler;		//Member speichert Callback
}

main()
{
	classA1 a1;
	// ein Interrupt kommt
	// die Funktion foo() wird in der InterfaceClass (a1::m_pIntf::InterfaceClass) aufgerufen
	// classA1::interruptHandler() wird ausgeführt.
}
</code></pre>
<p>Wenn ich das jetzt richtig verstanden habe lassen sich normale Memberfunktionszeiger nicht mehr mit der Vererbung vereinbaren.</p>
<p>Kennt jemand evtl. ein Beispiel, wie ich das Problem lösen kann?</p>
<p>Solange schaue ich mir noch &lt;iosfwd&gt;)an</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806470</guid><dc:creator><![CDATA[butze_124]]></dc:creator><pubDate>Wed, 11 Nov 2009 13:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 14:21:09 GMT]]></title><description><![CDATA[<p>Ein anderer Tipp für dich:</p>
<p>Mußt du denn unbedingt die setCallback-Methode in die öffentliche Schnittstelle packen? Du sagst ja selber, daß du es nur intern benötigst.</p>
<p>Dann reich doch einfach eine Schnittstellenklasse nach außen und intern verwendest du eine davon abgeleitete Klasse, welche dann die setCallback-Methode anbietet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806505</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 11 Nov 2009 14:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 16:21:16 GMT]]></title><description><![CDATA[<blockquote>
<p>Kann mir jemand einen Tip geben, wie ich den Parameter für diese Funktion vorwärts-deklariere?</p>
</blockquote>
<p>Wenns ein &quot;function_fwd.hpp&quot; File o.ä. gibt, dann include eben das, statt dem &quot;ganzen&quot; File.</p>
<p>Sonst würde ich das eher bleiben lassen.</p>
<p>Wenn du unbedingt willst, kannst du natürlich probieren, ob es so geht:</p>
<pre><code class="language-cpp">namespace boost
{
template &lt;class T&gt; class function;
} // boost
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1806599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806599</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Nov 2009 16:21:16 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Deklaration von Parameter vom Typ boost::function&amp;lt;int ()&amp;gt; on Wed, 11 Nov 2009 22:40:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn du unbedingt willst, kannst du natürlich probieren, ob es so geht:</p>
<pre><code class="language-cpp">C/C++ Code:
namespace boost
{
template &lt;class T&gt; class function;
} // boost
</code></pre>
<p>} // boost</p>
</blockquote>
<p>das hat auf Anhieb geklappt!</p>
<p>Vielen Vielen Dank euch allen - ihr habt mir viel Arbeit mit dem Rumfrickeln mit den Funktionspointern erspart!</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806779</guid><dc:creator><![CDATA[butze_124]]></dc:creator><pubDate>Wed, 11 Nov 2009 22:40:10 GMT</pubDate></item></channel></rss>