<?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[policy pattern und ref-counter]]></title><description><![CDATA[<p>hallo</p>
<p>da ein statischer member einer klasse ja je nach templateargument ein eigener ist (wegen der instanziierung) frage ich mich, wie ich gleichzeitig das policy pattern und einen reference counter implementieren kann. denn ich würde gerne den reference counter so machen, dass er über alle nicht-policy-template-parameter hinweg unterschiedlich ist, jedoch über die policy-template-parameter hinweg gleich.</p>
<p>zur veranschaulichung:</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;
struct policy_1
{
};
struct policy_2
{
};
template&lt;class T, class policy = policy_1&gt;
struct foo
{
	static unsigned ref_counter;
	foo()
	{
		ref_counter++;
	}
	~foo()
	{
		ref_counter--;
	}
	template&lt;class rhs_policy&gt;
	foo(foo&lt;T, rhs_policy&gt; const&amp; rhs)
	{
		ref_counter++;
	}
	template&lt;class rhs_policy&gt;
	foo&amp; operator= (foo&lt;T, rhs_policy&gt; const&amp; rhs)
	{
	}
};
template&lt;class T, class policy&gt;
unsigned foo&lt;T, policy&gt;::ref_counter;
int main()
{
	foo&lt;int&gt; bar1;
	cout &lt;&lt; bar1.ref_counter &lt;&lt; '\n'; // ausgabe: 1, gewünscht: 1
	foo&lt;float&gt; bar2[2];
	cout &lt;&lt; bar2[0].ref_counter &lt;&lt; '\n'; // ausgabe: 2, gewünscht: 2
	foo&lt;int, policy_2&gt; bar3;
	cout &lt;&lt; bar3.ref_counter &lt;&lt; '\n'; // ausgabe: 1, gewünscht: 2 (da selber parameter class T wie bar1)
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/321146/policy-pattern-und-ref-counter</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 03:40:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321146.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Oct 2013 14:16:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to policy pattern und ref-counter on Fri, 25 Oct 2013 14:16:33 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>da ein statischer member einer klasse ja je nach templateargument ein eigener ist (wegen der instanziierung) frage ich mich, wie ich gleichzeitig das policy pattern und einen reference counter implementieren kann. denn ich würde gerne den reference counter so machen, dass er über alle nicht-policy-template-parameter hinweg unterschiedlich ist, jedoch über die policy-template-parameter hinweg gleich.</p>
<p>zur veranschaulichung:</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;
struct policy_1
{
};
struct policy_2
{
};
template&lt;class T, class policy = policy_1&gt;
struct foo
{
	static unsigned ref_counter;
	foo()
	{
		ref_counter++;
	}
	~foo()
	{
		ref_counter--;
	}
	template&lt;class rhs_policy&gt;
	foo(foo&lt;T, rhs_policy&gt; const&amp; rhs)
	{
		ref_counter++;
	}
	template&lt;class rhs_policy&gt;
	foo&amp; operator= (foo&lt;T, rhs_policy&gt; const&amp; rhs)
	{
	}
};
template&lt;class T, class policy&gt;
unsigned foo&lt;T, policy&gt;::ref_counter;
int main()
{
	foo&lt;int&gt; bar1;
	cout &lt;&lt; bar1.ref_counter &lt;&lt; '\n'; // ausgabe: 1, gewünscht: 1
	foo&lt;float&gt; bar2[2];
	cout &lt;&lt; bar2[0].ref_counter &lt;&lt; '\n'; // ausgabe: 2, gewünscht: 2
	foo&lt;int, policy_2&gt; bar3;
	cout &lt;&lt; bar3.ref_counter &lt;&lt; '\n'; // ausgabe: 1, gewünscht: 2 (da selber parameter class T wie bar1)
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2362905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362905</guid><dc:creator><![CDATA[asgasgfgf]]></dc:creator><pubDate>Fri, 25 Oct 2013 14:16:33 GMT</pubDate></item><item><title><![CDATA[Reply to policy pattern und ref-counter on Fri, 25 Oct 2013 14:30:51 GMT]]></title><description><![CDATA[<p>Der Trick ist, das Refcounting in eine Basisklasse auszulagern, die nicht von der Policy abhängt.</p>
<pre><code class="language-cpp">using namespace std;
struct policy_1
{
};
struct policy_2
{
};

template &lt;class T&gt;
struct basic_foo {
  static unsigned ref_counter;
  basic_foo()
  {
    ref_counter++;
  }
  ~basic_foo()
  {
    ref_counter--;
  }
  basic_foo(basic_foo const&amp; rhs)
  {
    ref_counter++;
  }
  basic_foo&amp; operator= (basic_foo const&amp; rhs)
  {
  }
};

template&lt;class T, class policy = policy_1&gt;
struct foo : basic_foo&lt;T&gt;
{
};

template&lt;class T&gt;
unsigned basic_foo&lt;T&gt;::ref_counter;
int main()
{
  foo&lt;int&gt; bar1;
  cout &lt;&lt; bar1.ref_counter &lt;&lt; '\n';
  foo&lt;float&gt; bar2[2];
  cout &lt;&lt; bar2[0].ref_counter &lt;&lt; '\n';
  foo&lt;int, policy_2&gt; bar3;
  cout &lt;&lt; bar3.ref_counter &lt;&lt; '\n'; // jetzt wie gewünscht 2
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2362911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362911</guid><dc:creator><![CDATA[basic_asdgasdw]]></dc:creator><pubDate>Fri, 25 Oct 2013 14:30:51 GMT</pubDate></item></channel></rss>