<?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[Private Interface]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Interface, dass ich global sperren können möchte. Dazu habe ich mir überlegt, für das Sperren ein eigenes Interface zu definieren, von welchem ich mein eigentliches Interface ableite. Da ich die Sperrfunktion nur global brauche, soll die in meinem eigentlichen Interface nicht zu sehen sein - ich leite also privat ab. Die frage ist, ob ich denn dann über den Sperr-Interface-Pointer an die Sperrfunktion noch dran komme. Ein erster Test sieht vielversprechend aus, logisch find ich es aber nicht. Hier der Beispielcode, dann wird's verständlicher:</p>
<pre><code>class IfGlobalLock {
protected:
  static bool locked = false;

public:
  void setLock(bool _lock) { locked = _lock; }
  bool getLock() { return locked; }
};

class IfMyInterface : private IfGlobalLock {
public:
  virtual IfMyInterface() {};
  virtual ~IfMyInterface() {};
  virtual void operation() = 0;
};

class MyClass : public IfMyInterface {
  bool operation() {
    if (locked) {
      return false;
    } else {
      return true;
    }
  }
};

void main() {
  MyClass myObjA;
  MyClass myObjB;
  MyClass myObjC;
  IfGlobalLock *globalLock;
  bool result = false;

  result = myObjA.operation();  // returns true
  result = myObjB.operation();  // returns true
  result = myObjC.operation();  // returns true

  globalLock = &amp;myObjA;
  globalLock-&gt;setLock(true);

  result = myObjA.operation();  // returns false
  result = myObjB.operation();  // returns false
  result = myObjC.operation();  // returns false
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/335666/private-interface</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 08:40:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335666.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Dec 2015 10:20:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Private Interface on Thu, 03 Dec 2015 10:20:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Interface, dass ich global sperren können möchte. Dazu habe ich mir überlegt, für das Sperren ein eigenes Interface zu definieren, von welchem ich mein eigentliches Interface ableite. Da ich die Sperrfunktion nur global brauche, soll die in meinem eigentlichen Interface nicht zu sehen sein - ich leite also privat ab. Die frage ist, ob ich denn dann über den Sperr-Interface-Pointer an die Sperrfunktion noch dran komme. Ein erster Test sieht vielversprechend aus, logisch find ich es aber nicht. Hier der Beispielcode, dann wird's verständlicher:</p>
<pre><code>class IfGlobalLock {
protected:
  static bool locked = false;

public:
  void setLock(bool _lock) { locked = _lock; }
  bool getLock() { return locked; }
};

class IfMyInterface : private IfGlobalLock {
public:
  virtual IfMyInterface() {};
  virtual ~IfMyInterface() {};
  virtual void operation() = 0;
};

class MyClass : public IfMyInterface {
  bool operation() {
    if (locked) {
      return false;
    } else {
      return true;
    }
  }
};

void main() {
  MyClass myObjA;
  MyClass myObjB;
  MyClass myObjC;
  IfGlobalLock *globalLock;
  bool result = false;

  result = myObjA.operation();  // returns true
  result = myObjB.operation();  // returns true
  result = myObjC.operation();  // returns true

  globalLock = &amp;myObjA;
  globalLock-&gt;setLock(true);

  result = myObjA.operation();  // returns false
  result = myObjB.operation();  // returns false
  result = myObjC.operation();  // returns false
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2478010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478010</guid><dc:creator><![CDATA[heimchen]]></dc:creator><pubDate>Thu, 03 Dec 2015 10:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Private Interface on Thu, 03 Dec 2015 10:37:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zunächst 2 Anmerkungen:<br />
- Ein Konstruktor kann nicht virtual sein (kompiliert das!?)<br />
- Der Destruktor sollte in der Basisklasse IfGlobalLock virtual sein</p>
<p>Den Sinn der IfGlobalLock-Klasse als Basisklasse verstehe ich überhaupt nicht.<br />
Wozu ist das eine Basisklasse? Die Ableitungen könnten ja auch so das Flag abfragen.<br />
Auch die Standard-Fragen 'ist ein?' und 'ist implemtiert wie?' würde ich eher verneinen.<br />
Und was ist jetzt die Frage? Warum &quot;globalLock-&gt;setLock(true);&quot; funktioniert?<br />
Warum sollte das nicht funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478014</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 03 Dec 2015 10:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Private Interface on Thu, 03 Dec 2015 10:47:37 GMT]]></title><description><![CDATA[<p>Der Code compiliert hier (mit Clang) überhaupt nicht. Da sind ein Haufen kleiner Fehler drin. Welchen Compiler benutzt du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478019</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 03 Dec 2015 10:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Private Interface on Thu, 03 Dec 2015 11:15:42 GMT]]></title><description><![CDATA[<p>Ich muss gestehen, ich hab da noch etwas nachgefummelt, da sind ein paar Copy-Paste Fehler rein gekommen. Aber das Prinzip wird deutlich.<br />
Sinn dieses Konstruktes ist, dass setLock vor den Nutzern von IfMyInterface zu verbergen. Weil nicht jeder locken können soll, sondern nur einer global. Natürlich kann jeder über diesen Mechanismus auch an setLock dran kommen, aber es ist eben nicht (offensichtlich) in IfMyInterface enthalten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478024</guid><dc:creator><![CDATA[heimchen]]></dc:creator><pubDate>Thu, 03 Dec 2015 11:15:42 GMT</pubDate></item><item><title><![CDATA[Reply to Private Interface on Thu, 03 Dec 2015 11:33:10 GMT]]></title><description><![CDATA[<p>heimchen schrieb:</p>
<blockquote>
<p>Sinn dieses Konstruktes ist, dass setLock vor den Nutzern von IfMyInterface zu verbergen.</p>
</blockquote>
<p>Dann sollte aber MyClass von IfMyInterface und IfGlobalLock erben. So wie es jetzt ist bringt es gar nichts, da man über das IfMyInterface genauso Zugriff auf deine lock Funktionen hat.</p>
<p>heimchen schrieb:</p>
<blockquote>
<p>Weil nicht jeder locken können soll, sondern nur einer global.</p>
</blockquote>
<p>Was genau heißt global? In deinem Code ist die locked Einstellung eine static Variable. Ist das absicht? Sollen alle Objekte gelocked werden oder pro Objekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478025</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 03 Dec 2015 11:33:10 GMT</pubDate></item><item><title><![CDATA[Reply to Private Interface on Thu, 03 Dec 2015 11:35:23 GMT]]></title><description><![CDATA[<p>Alle Objekte über einen Zugriff - also static ist Absicht.</p>
<p>IfMyInterface ist ein generisches Interface und wird sehr häufig verwendet. Es soll aber immer die Lock-Funktion enthalten. Darum wäre die Variante mit von beiden Erben nicht so schön...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478026</guid><dc:creator><![CDATA[heimchen]]></dc:creator><pubDate>Thu, 03 Dec 2015 11:35:23 GMT</pubDate></item></channel></rss>