<?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[Probleme mit Makro zur Definion von &amp;quot;Getter&#x2F;Setter-Paaren&amp;quot;.]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wollte mir ein Makro schreiben, mit dem ich die Definition von GetXyz() und SetXyz() abkürzen kann. Leider macht der Kompiler nicht mit :-(. Also, folgendes habe ich versucht:</p>
<pre><code class="language-cpp">/// Macro that can be used for definitions of a getter/setter method pair.
#define PROPERTY_DEFINITION(PropName, PropType, MemberVariable) \
inline const PropType&amp; GetPropName() const      { return MemberVariable; }; \
inline void SetPropName(const PropType&amp; value)  { MemberVariable = value; };
// ...
class AClass
{
private:
    std::string m_name;
    int         m_age;
public:
    PROPERTY_DEFINITION(Name, std::string, m_name)
    PROPERTY_DEFINITION(Age,  int,         m_age)
</code></pre>
<p>Hiermit klappt das für die einmalige Verwendung, bei der zweiten Zeile (Age) sagt er, dass 'GetPropName' bereits definiert wurde mit anderem Rückgabetyp. Ok, dass kann ich einsehen, dann erkennt der Präprozessor den Identifier PropName nicht mehr wenn es nicht als einzelnes Wort steht.</p>
<p>Dann habe ich versucht, GetPropName und SetPropName zu trennen, was aber auch fehlschlug (slber Fehler):</p>
<pre><code class="language-cpp">#define PROPERTY_DEFINITION(PropName, PropType, MemberVariable) \
inline const PropType&amp; Get\
PropName() const      { return MemberVariable; }; \
inline void Set\
PropName(const PropType&amp; value)  { MemberVariable = value; };
</code></pre>
<p>Eigentlich auch logisch, denn er erkennt ja den Zeilenumbruch nicht und alles ist, wie gehabt... Aber wie kann ich dass denn dann machen? Das muss doch irgendwie gehen.</p>
<p>Ich wäre eigentlich auch dankbar für eine ganz andere Lösung, denn defines find ich eigentlich grauenhaft (wg. Debugging, Code-Vervollständigung, etc.).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153409/probleme-mit-makro-zur-definion-von-quot-getter-setter-paaren-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 08:23:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153409.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Jul 2006 14:55:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Makro zur Definion von &amp;quot;Getter&#x2F;Setter-Paaren&amp;quot;. on Sun, 16 Jul 2006 14:55:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wollte mir ein Makro schreiben, mit dem ich die Definition von GetXyz() und SetXyz() abkürzen kann. Leider macht der Kompiler nicht mit :-(. Also, folgendes habe ich versucht:</p>
<pre><code class="language-cpp">/// Macro that can be used for definitions of a getter/setter method pair.
#define PROPERTY_DEFINITION(PropName, PropType, MemberVariable) \
inline const PropType&amp; GetPropName() const      { return MemberVariable; }; \
inline void SetPropName(const PropType&amp; value)  { MemberVariable = value; };
// ...
class AClass
{
private:
    std::string m_name;
    int         m_age;
public:
    PROPERTY_DEFINITION(Name, std::string, m_name)
    PROPERTY_DEFINITION(Age,  int,         m_age)
</code></pre>
<p>Hiermit klappt das für die einmalige Verwendung, bei der zweiten Zeile (Age) sagt er, dass 'GetPropName' bereits definiert wurde mit anderem Rückgabetyp. Ok, dass kann ich einsehen, dann erkennt der Präprozessor den Identifier PropName nicht mehr wenn es nicht als einzelnes Wort steht.</p>
<p>Dann habe ich versucht, GetPropName und SetPropName zu trennen, was aber auch fehlschlug (slber Fehler):</p>
<pre><code class="language-cpp">#define PROPERTY_DEFINITION(PropName, PropType, MemberVariable) \
inline const PropType&amp; Get\
PropName() const      { return MemberVariable; }; \
inline void Set\
PropName(const PropType&amp; value)  { MemberVariable = value; };
</code></pre>
<p>Eigentlich auch logisch, denn er erkennt ja den Zeilenumbruch nicht und alles ist, wie gehabt... Aber wie kann ich dass denn dann machen? Das muss doch irgendwie gehen.</p>
<p>Ich wäre eigentlich auch dankbar für eine ganz andere Lösung, denn defines find ich eigentlich grauenhaft (wg. Debugging, Code-Vervollständigung, etc.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098616</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Sun, 16 Jul 2006 14:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Makro zur Definion von &amp;quot;Getter&#x2F;Setter-Paaren&amp;quot;. on Sun, 16 Jul 2006 15:23:01 GMT]]></title><description><![CDATA[<p>probiers mal so</p>
<pre><code class="language-cpp">#define PROPERTY_DEFINITION(PropName, PropType, MemberVariable) \ 
inline const PropType &amp; Get##PropName() const      { return MemberVariable; }; \ 
inline void Set##PropName(const PropType &amp; value)  { MemberVariable = value; };
</code></pre>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098629</guid><dc:creator><![CDATA[Helmut S.]]></dc:creator><pubDate>Sun, 16 Jul 2006 15:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Makro zur Definion von &amp;quot;Getter&#x2F;Setter-Paaren&amp;quot;. on Sun, 16 Jul 2006 15:25:24 GMT]]></title><description><![CDATA[<p>Das war einfach. Danke <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1098632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098632</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Sun, 16 Jul 2006 15:25:24 GMT</pubDate></item></channel></rss>