<?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[Konstruktor bestimmt Verhalten von memberfunction]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe auch mal wieder eine naive Frage: Ist es möglich über den zur Initialisierung verwendeten Konstruktor das Verhalten einer Memberfunction zu steuern?</p>
<p>Fall 1: Das Objekt <code>foo</code> wird über den Defaultconstructor initialisiert, dann soll z.B. <code>foo::operator()(double) -&gt; double</code> einfach 0.0 zurückgeben.</p>
<p>Fall 2: Das Objekt <code>foo</code> wird mittels zweier Vektoren initialisiert, dann soll <code>foo::operator()(double) -&gt; double</code> einen interpolierten Wert zurückgeben.</p>
<p>Edit:<br />
Also ich könnte je nach verwendetem Konstruktor eine Variable <code>bool standard</code> initialisieren und <code>operator</code> fragt dann z.B. bei seinem Aufruf <code>if(standard == false / true)</code> , aber das wäre bei jedem Funktionsaufruf etwas arg umständlich, da noch eine <code>if</code> -Abfrage dazwischen zu klemmen - oder nicht?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321523/konstruktor-bestimmt-verhalten-von-memberfunction</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 05:57:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321523.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Nov 2013 20:38:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 20:45:56 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe auch mal wieder eine naive Frage: Ist es möglich über den zur Initialisierung verwendeten Konstruktor das Verhalten einer Memberfunction zu steuern?</p>
<p>Fall 1: Das Objekt <code>foo</code> wird über den Defaultconstructor initialisiert, dann soll z.B. <code>foo::operator()(double) -&gt; double</code> einfach 0.0 zurückgeben.</p>
<p>Fall 2: Das Objekt <code>foo</code> wird mittels zweier Vektoren initialisiert, dann soll <code>foo::operator()(double) -&gt; double</code> einen interpolierten Wert zurückgeben.</p>
<p>Edit:<br />
Also ich könnte je nach verwendetem Konstruktor eine Variable <code>bool standard</code> initialisieren und <code>operator</code> fragt dann z.B. bei seinem Aufruf <code>if(standard == false / true)</code> , aber das wäre bei jedem Funktionsaufruf etwas arg umständlich, da noch eine <code>if</code> -Abfrage dazwischen zu klemmen - oder nicht?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365565</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Thu, 14 Nov 2013 20:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 20:51:00 GMT]]></title><description><![CDATA[<p>Ein Objekt, das sich je nach Konstruktoraufruf anders verhält? Das ist nicht ein Objekttyp, das sind zwei verschiedene! Mach zwei unterschiedliche Klassen draus. Wenn das nicht geht, sag wieso und ich zeige dir, wie man Vererbung nach aussen hin unsichtbar macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365568</guid><dc:creator><![CDATA[binsehrlieb]]></dc:creator><pubDate>Thu, 14 Nov 2013 20:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 20:52:40 GMT]]></title><description><![CDATA[<p>binsehrlieb schrieb:</p>
<blockquote>
<p>Wenn das nicht geht, sag wieso und ich zeige dir, wie man Vererbung nach aussen hin unsichtbar macht.</p>
</blockquote>
<p>Weil ich z.B. einen Vektor der gegebenen Klasse füllen möchte, da kann ich nicht einfach zwei Klassen drauß machen.</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365570</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Thu, 14 Nov 2013 20:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 21:01:45 GMT]]></title><description><![CDATA[<blockquote>
<p>aber das wäre bei jedem Funktionsaufruf etwas arg umständlich, da noch eine if-Abfrage dazwischen zu klemmen - oder nicht?</p>
</blockquote>
<p>Wie willst du sonst eine Unterscheidung treffen? Natürlich ist das in Ordnung.</p>
<p>Du könntest auch als Bedingung die Größe der internen Vektoren abfragen, mittels <code>empty()</code> (die ja beim zweiten Konstruktor dann gefüllt werden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365573</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 14 Nov 2013 21:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 21:05:19 GMT]]></title><description><![CDATA[<p>Edit:... Überlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365574</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Thu, 14 Nov 2013 21:05:19 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 21:05:00 GMT]]></title><description><![CDATA[<p>freaky schrieb:</p>
<blockquote>
<p>Was spricht gegen diese einfache Methode?</p>
</blockquote>
<p>Nichts, aber die hat er doch selbst schon in Erwägung gezogen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365575</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 14 Nov 2013 21:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Thu, 14 Nov 2013 21:32:52 GMT]]></title><description><![CDATA[<p>Die vermutlich schnellere Variante ist ein if/else, die etwas flexiblere wäre Vererbung+type erasure:</p>
<pre><code class="language-cpp">class speziell {
struct allg {
virtual double get() =0;
};
struct einfach0 : allg {
double get() { return 0.0; }
};
struct interpoliert : allg {
interpoliert(double x) : x(x) {}
double x;
double get() { return x; }
};
std::unique_ptr&lt;allg&gt; data;
public:
speziell() : data(new einfach0) {}
speziell(double x) : data(new interpoliert(x)) {}

double get() { return data-&gt;get(); }
};
</code></pre>
<p><a href="http://ideone.com/HV5Drc" rel="nofollow">http://ideone.com/HV5Drc</a></p>
<p>Um die Indirektion wirst du nicht herumkommen, ausser du schaffst es irgendwie, die 0 als Spezialfall der Interpolation hinzubekommen. Sehr wahrscheinlich ist das if bei dir am besten geeignet, aber ich wollte dir zumindest noch eine Alternative zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365577</guid><dc:creator><![CDATA[binsehrlieb]]></dc:creator><pubDate>Thu, 14 Nov 2013 21:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Fri, 15 Nov 2013 06:06:32 GMT]]></title><description><![CDATA[<p>Einfach in einem zusätzlichem double denWert speichern, denn der operator zurückliefert?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365599</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 15 Nov 2013 06:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Fri, 15 Nov 2013 07:17:18 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Einfach in einem zusätzlichem double denWert speichern, denn der operator zurückliefert?!</p>
</blockquote>
<p>Wie meinen?</p>
<p>Dann komme ich aber nicht drum herum abzufragen, ob ich einen interpolierten Wert möchte oder diesen zusätzlich gespeicherten Wert? <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>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365600</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 15 Nov 2013 07:17:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Fri, 15 Nov 2013 07:24:46 GMT]]></title><description><![CDATA[<p>ich werfe hier mal einfach das wort pimpl-idiom in den raum (auch wenn das für den beschriebenen anwendungsfall deutlich overkill ist).</p>
<p>beispiel:</p>
<pre><code>#include &lt;memory&gt;
#include &lt;vector&gt;
struct foo_impl_interface
{
	virtual double fn(double) const = 0;
};
struct foo_impl_zero : public foo_impl_interface
{
	virtual double fn(double) const
	{
		return 0.0;
	}
};
template&lt;class IteratorType&gt;
struct foo_impl_interpol : public foo_impl_interface
{
	IteratorType begin1, end1;
	IteratorType begin2, end2;
	foo_impl_interpol(IteratorType begin1, IteratorType end1, IteratorType begin2, IteratorType end2)
		: begin1(begin1), end1(end1), begin2(begin2), end2(end2)
	{
	}
	// wenn du die beiden vektoren für die interpolation doch nicht brauchst, das hier oben einfach weglassen
	virtual double fn(double) const
	{
		// hier den teil mit der interpolation einfügen
		return 1.0;
	}
};
class foo
{
	std::unique_ptr&lt;foo_impl_interface&gt; impl;
public:
	foo()
		: impl(new foo_impl_zero)
	{
	}
	foo(std::vector&lt;double&gt; const&amp; vec1, std::vector&lt;double&gt; const&amp; vec2)
		: impl(new foo_impl_interpol&lt;std::vector&lt;double&gt;::const_iterator&gt;(vec1.begin(), vec1.end(), vec2.begin(), vec2.end()))
	{
	}
	double operator() (double val) const
	{
		return this-&gt;impl-&gt;fn(val);
	}
};
int main()
{
	foo a;
	std::vector&lt;double&gt; lhs, rhs;
	foo b(lhs, rhs);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2365601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365601</guid><dc:creator><![CDATA[asfsadf_at_work_lol]]></dc:creator><pubDate>Fri, 15 Nov 2013 07:24:46 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Fri, 15 Nov 2013 07:31:06 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Einfach in einem zusätzlichem double denWert speichern, denn der operator zurückliefert?!</p>
</blockquote>
<p>Wie meinen?</p>
<p>Dann komme ich aber nicht drum herum abzufragen, ob ich einen interpolierten Wert möchte oder diesen zusätzlich gespeicherten Wert? <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>
<p>Gruß,<br />
-- Klaus.</p>
</blockquote>
<p>Musste dann aber nur einmal im Konstruktor machen und nicht bei jedem Aufruf von operator double.<br />
BTW: operator type sind nicht grad das Gelbe vom Ei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365602</guid><dc:creator><![CDATA[Nathan_logoff]]></dc:creator><pubDate>Fri, 15 Nov 2013 07:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bestimmt Verhalten von memberfunction on Fri, 15 Nov 2013 19:53:58 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/27708">@Klaus82</a><br />
Wie heisst deine Klasse? Und was ist ihre Aufgabe? Was stellt sie dar?</p>
<p>Wenn du diese Fragen beantwortest, dann ergibt sich das Design meist ganz von selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365777</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 15 Nov 2013 19:53:58 GMT</pubDate></item></channel></rss>