<?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[Geteilte Instanz.]]></title><description><![CDATA[<p>Hallo noch mal,</p>
<p>Ich habe eine Klasse compound_t. Diese ist intern ein std::vector. Als letztes Element wird immer ein Objekt des typs next_t angehängt. Das soll am besten implizit geschehen und nicht jedes mal das Objekt per Parameterliste übergeben werden müssen. Und zweitens soll es sich immer um die selbe Instanz handeln um Speicher zu sparen. Somit kann ich das Objekt nicht erst im Konstruktor erstellen. Es muss von Außen kommen. Das widerspricht sich ein wenig.</p>
<p>Ich bin jetzt schon auf die Idee gekommen eine Fabrikklasse zu schreiben, die eine Instanz von next_t hält und diese bei der Konstruktion immer überreicht.</p>
<p>Also so,</p>
<pre><code>class compund_factory_t
{
private:

  virtual_machine_t &amp;vm;
  next_t next;

public:

  compound_factory_t(virtual_machine_t &amp;vm)
   : vm(vm), 
     next(vm)
  { }

  template&lt;typename ... args_t&gt;
  compound_t operator()(args_t ... args)
  {
     return compound_t(vm, next, args ...);
  }
};

int main()
{
 ...
  compund_factory_t make_compound(vm);
  compound_t compound1 = make_compound( ... );
  compound_t compound2 = make_compound( ... ); 
 ...
}
</code></pre>
<p>Vorsicht. Code nicht getestet! Wollte nur das Prinzip verdeutlichen. Was haltet ihr davon? Habt ihr vielleicht eine Besser Lösung parat?</p>
<p>Danke,<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297965/geteilte-instanz</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 04:21:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297965.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Jan 2012 18:17:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Geteilte Instanz. on Tue, 10 Jan 2012 18:17:12 GMT]]></title><description><![CDATA[<p>Hallo noch mal,</p>
<p>Ich habe eine Klasse compound_t. Diese ist intern ein std::vector. Als letztes Element wird immer ein Objekt des typs next_t angehängt. Das soll am besten implizit geschehen und nicht jedes mal das Objekt per Parameterliste übergeben werden müssen. Und zweitens soll es sich immer um die selbe Instanz handeln um Speicher zu sparen. Somit kann ich das Objekt nicht erst im Konstruktor erstellen. Es muss von Außen kommen. Das widerspricht sich ein wenig.</p>
<p>Ich bin jetzt schon auf die Idee gekommen eine Fabrikklasse zu schreiben, die eine Instanz von next_t hält und diese bei der Konstruktion immer überreicht.</p>
<p>Also so,</p>
<pre><code>class compund_factory_t
{
private:

  virtual_machine_t &amp;vm;
  next_t next;

public:

  compound_factory_t(virtual_machine_t &amp;vm)
   : vm(vm), 
     next(vm)
  { }

  template&lt;typename ... args_t&gt;
  compound_t operator()(args_t ... args)
  {
     return compound_t(vm, next, args ...);
  }
};

int main()
{
 ...
  compund_factory_t make_compound(vm);
  compound_t compound1 = make_compound( ... );
  compound_t compound2 = make_compound( ... ); 
 ...
}
</code></pre>
<p>Vorsicht. Code nicht getestet! Wollte nur das Prinzip verdeutlichen. Was haltet ihr davon? Habt ihr vielleicht eine Besser Lösung parat?</p>
<p>Danke,<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166476</guid><dc:creator><![CDATA[Martin Kalbfuß]]></dc:creator><pubDate>Tue, 10 Jan 2012 18:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Geteilte Instanz. on Sun, 15 Jan 2012 09:41:28 GMT]]></title><description><![CDATA[<p>Weiß nicht genau, ob ich nicht was nicht verstanden habe, aber was spricht dagegen diese 'next_t' Instanz einfach static zu machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166485</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 15 Jan 2012 09:41:28 GMT</pubDate></item><item><title><![CDATA[Reply to Geteilte Instanz. on Tue, 10 Jan 2012 19:37:17 GMT]]></title><description><![CDATA[<p>Hallo Martin,</p>
<p>ich weiß zwar nicht, was du vor hast, aber möchtest du einfach eine Factory,<br />
der du einmal die Parameter übergibst und dann nur noch create aufrufst?</p>
<p>Wahrscheinlich lieg ich völlig falsch, aber vielleicht willst du sowas:</p>
<pre><code class="language-cpp">#include &lt;utility&gt; 
#include &lt;tuple&gt;
#include &lt;boost/type_traits/remove_const.hpp&gt;

struct Foo{

	Foo(int i, char c){}
};

template&lt;unsigned int I, typename Type, typename... TParams&gt;
struct factory_helper{

	template&lt;typename TTuple, typename... TParams2&gt;
	static Type create_instance(TTuple&amp; tuple, TParams2... params){
		typedef typename std::tuple_element&lt;I-1, typename boost::remove_const&lt;TTuple&gt;::type &gt;::type forward_type;
		return factory_helper&lt;I-1, Type, TParams...&gt;::template create_instance&lt;TTuple, forward_type, TParams2...&gt;(tuple, std::get&lt;I-1&gt;(tuple), params...);
	}

};

template&lt;class Type, typename... TParams&gt;
struct factory_helper&lt;0, Type, TParams...&gt;{
	typedef std::tuple&lt;TParams...&gt; tuple_type;

	template&lt;typename TTuple, typename... TParams2&gt;
	static Type create_instance(TTuple&amp; tuple, TParams2... params){
		return Type(params...);
	}
};

template&lt;class Type, typename... TParams&gt;
class factory{
private:
public:
	factory(TParams... params) : _params(params...) {}

	Type operator()() const{
		return factory_helper&lt;sizeof...(TParams), Type, TParams...&gt;::create_instance(_params);
	}

private:
	std::tuple&lt;TParams...&gt; _params;
};

template&lt;typename Type, typename... TParams&gt;
static factory&lt;Type, TParams...&gt; create_factory(TParams... params){
	return factory&lt;Type, TParams...&gt;(params...);
}

int main() 
{ 
	auto factory = create_factory&lt;Foo&gt;(1,'c');
	Foo foo = factory();
}
</code></pre>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166507</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 10 Jan 2012 19:37:17 GMT</pubDate></item></channel></rss>