<?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[Reference zu pointer template]]></title><description><![CDATA[<p>Hallo zusammen,<br />
Folgendes Problem, ich will den Zugriff eine Variable normieren, egal ob es sich um einen Pointer handelt oder nicht.<br />
Zu Verdeutlichung der folgende Quelltext.<br />
Ich habe auch schon mit den type_traits der Boost rum gespielt komme aber zu keinem Ergebnis.<br />
Irgendwelche Vorschläge, sollte auf jedenfall C++98 sein.<br />
Danke schon mal</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;boost/type_traits/is_pointer.hpp&gt;
#include &lt;boost/type_traits/remove_pointer.hpp&gt;

using namespace std;

/*
template &lt;typename T&gt;
inline typename boost::remove_pointer&lt;T&gt;::type getPointer(const T &amp;value)
{		
	return boost::is_pointer&lt;T&gt;::value ? *value : value ;
}
*/

template &lt;typename T&gt;
inline const T * getPointer(const T &amp;value)
{	
	return &amp;value ;
}

template &lt;typename T&gt;
inline const T *getPointer(const T * value)
{
	return value ;
}

struct DataValue
{
	int m_FirstValue ;
	int m_SecondValue ;
	DataValue(int first,int second)
	:m_FirstValue(first),m_SecondValue(second)
	{}
};

int main()
{
	DataValue StackValue(10,100) ;
	cout &lt;&lt; getPointer(StackValue)-&gt;m_FirstValue &lt;&lt; &quot;\n&quot;;

	DataValue *HeapValue=new DataValue(30,300) ;
	cout &lt;&lt; getPointer(HeapValue)-&gt;m_FirstValue &lt;&lt; &quot;\n&quot;;
	delete HeapValue ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/330420/reference-zu-pointer-template</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 10:38:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330420.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Jan 2015 12:16:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Reference zu pointer template on Fri, 09 Jan 2015 12:16:16 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
Folgendes Problem, ich will den Zugriff eine Variable normieren, egal ob es sich um einen Pointer handelt oder nicht.<br />
Zu Verdeutlichung der folgende Quelltext.<br />
Ich habe auch schon mit den type_traits der Boost rum gespielt komme aber zu keinem Ergebnis.<br />
Irgendwelche Vorschläge, sollte auf jedenfall C++98 sein.<br />
Danke schon mal</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;boost/type_traits/is_pointer.hpp&gt;
#include &lt;boost/type_traits/remove_pointer.hpp&gt;

using namespace std;

/*
template &lt;typename T&gt;
inline typename boost::remove_pointer&lt;T&gt;::type getPointer(const T &amp;value)
{		
	return boost::is_pointer&lt;T&gt;::value ? *value : value ;
}
*/

template &lt;typename T&gt;
inline const T * getPointer(const T &amp;value)
{	
	return &amp;value ;
}

template &lt;typename T&gt;
inline const T *getPointer(const T * value)
{
	return value ;
}

struct DataValue
{
	int m_FirstValue ;
	int m_SecondValue ;
	DataValue(int first,int second)
	:m_FirstValue(first),m_SecondValue(second)
	{}
};

int main()
{
	DataValue StackValue(10,100) ;
	cout &lt;&lt; getPointer(StackValue)-&gt;m_FirstValue &lt;&lt; &quot;\n&quot;;

	DataValue *HeapValue=new DataValue(30,300) ;
	cout &lt;&lt; getPointer(HeapValue)-&gt;m_FirstValue &lt;&lt; &quot;\n&quot;;
	delete HeapValue ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2436685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436685</guid><dc:creator><![CDATA[case]]></dc:creator><pubDate>Fri, 09 Jan 2015 12:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Reference zu pointer template on Fri, 09 Jan 2015 12:19:18 GMT]]></title><description><![CDATA[<p>Du musst halt noch die non-const Überladungen hinzufügen, dann sollte es gehen.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
inline const T * getPointer(const T &amp;value)
{
  return &amp;value ;
}
template &lt;typename T&gt;
inline T * getPointer(T &amp;value)
{
  return &amp;value ;
}

template &lt;typename T&gt;
inline T *getPointer(T * value)
{
  return value ;
}
template &lt;typename T&gt;
inline const T *getPointer(const T * value)
{
  return value ;
}
</code></pre>
<p>Ansonsten wird z.B &quot;int*&quot; auf &quot;int *const&amp;&quot; gemapped, was du nicht willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436687</guid><dc:creator><![CDATA[constitutio]]></dc:creator><pubDate>Fri, 09 Jan 2015 12:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Reference zu pointer template on Fri, 09 Jan 2015 12:32:32 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.<br />
Mit dem gcc wird alles ohne Probleme compiliert und läuft auch entsprechend.<br />
Mit meinen Borland 5 krieg ich folgenden Fehler:</p>
<p>d:\myprog\getPointer&gt;bcc32 -Ic:\etsbuilder\include getPointer.cpp<br />
Borland C++ 5.5.1 für Win32 Copyright (c) 1993, 2000 Borland<br />
getPointer.cpp:<br />
Fehler E2015 getPointer.cpp 67: Mehrdeutigkeit zwischen 'getPointer&lt;DataValue *&gt;(DataValue * &amp;)' und 'getPointer&lt;DataValue&gt;(DataValue *)' in Funktion main()<br />
*** 1 Fehler bei der Compilierung ***</p>
<p>Noch eine Idee wie ich den Dreckskompiler aus tricksen könnte ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436689</guid><dc:creator><![CDATA[case]]></dc:creator><pubDate>Fri, 09 Jan 2015 12:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Reference zu pointer template on Fri, 09 Jan 2015 15:03:27 GMT]]></title><description><![CDATA[<p>Ich vermute mal SFINAE hast Du schon probiert und das kann der Compiler auch nicht?</p>
<pre><code>template &lt;typename T&gt;
inline const T* getPointer(const T&amp; value, typename enable_if&lt;!boost::is_pointer&lt;T&gt;::value, int&gt;::type = 0)
{  
    return &amp;value ;
}

template &lt;typename T&gt;
inline T getPointer(T value, typename enable_if&lt;boost::is_pointer&lt;T&gt;::value, int&gt;::type = 0)
{
    return value;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2436732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436732</guid><dc:creator><![CDATA[__cu]]></dc:creator><pubDate>Fri, 09 Jan 2015 15:03:27 GMT</pubDate></item><item><title><![CDATA[Reply to Reference zu pointer template on Fri, 09 Jan 2015 23:38:32 GMT]]></title><description><![CDATA[<p>Das soll vermutlich</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
inline const T * getPointer(const T &amp;value)
{  
    return &amp;value ;
}

template &lt;typename T&gt;
inline const T *getPointer( T * const &amp;value)
{
    return value ;
}
</code></pre>
<p>sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436784</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 09 Jan 2015 23:38:32 GMT</pubDate></item></channel></rss>