<?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[Scope ala (package, internal) in C++ möglich?]]></title><description><![CDATA[<p>Servus,</p>
<p>gibt es in C++ einen Scope der nur einen Zugriff auf einem bestimmten Namensraum erlaubt?</p>
<p>Sprich, zwischen public und protected. Java heißt es &quot;package&quot; und C# &quot;internal&quot;. Gibt es denn sowas auch in C++ oder kann ich es irgendwie nachbilden?</p>
<p>Funktioniert das mit anonymen Namensräume?</p>
<p>Gruß<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242107/scope-ala-package-internal-in-c-möglich</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 03:59:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242107.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 May 2009 12:46:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 12:46:56 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>gibt es in C++ einen Scope der nur einen Zugriff auf einem bestimmten Namensraum erlaubt?</p>
<p>Sprich, zwischen public und protected. Java heißt es &quot;package&quot; und C# &quot;internal&quot;. Gibt es denn sowas auch in C++ oder kann ich es irgendwie nachbilden?</p>
<p>Funktioniert das mit anonymen Namensräume?</p>
<p>Gruß<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718264</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Sat, 30 May 2009 12:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 12:56:14 GMT]]></title><description><![CDATA[<p>In C++ gibt es höchstens <code>friend</code> :<br />
<a href="http://www.cplusplus.com/doc/tutorial/inheritance/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/inheritance/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718269</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 May 2009 12:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 14:19:08 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>mit friend müsste ich alle Klassen explizit angeben. Na gut, eine Lösung ist besser als keine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Ich denke mal, dass friend eine leere oder rein virtuelle Klasse erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718301</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Sat, 30 May 2009 14:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 14:28:07 GMT]]></title><description><![CDATA[<p>Ich würde nicht unbedingt versuchen, Möglichkeiten anderer Programmiersprachen 1:1 auf C++ zu übertragen. Zumal <code>friend</code> auch nicht besonders sauber ist. Wozu brauchst du dieses Feature konkret?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718306</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 30 May 2009 14:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 14:36:58 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>In C++ gibt es höchstens <code>friend</code> :<br />
<a href="http://www.cplusplus.com/doc/tutorial/inheritance/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/inheritance/</a></p>
<p>Grüssli</p>
</blockquote>
<p>friend ist die stärkste bindung in C++, sogar noch stärker als Vererbung - das sollte man nicht mit einem Zugriffsspezifizierer zwischen public und protected vergleichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718308</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 30 May 2009 14:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 14:41:13 GMT]]></title><description><![CDATA[<p>&quot;Scope ... Namensraum&quot; ist doch das gleiche. Danach macht die Frage keinen Sinn mehr. Wenn du verhindern willst, dass von aussen jemand interne Funktionen nutzt, dann biete kein Interface dazu an bzw. exportiere die Funktionsnamen nicht. Das kann man z.B. mit unbenannten Namensraeumen. Eine andere Moeglichkeit waere ein kurzer Kommentar bei der Deklaration: &quot;Fuer interne Zwecke, nicht benutzen!&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718310</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 30 May 2009 14:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 14:46:04 GMT]]></title><description><![CDATA[<p>Wenn du sowas wie package private in java meinst, nein das gibts in c++ nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718312</guid><dc:creator><![CDATA[xxxyyy]]></dc:creator><pubDate>Sat, 30 May 2009 14:46:04 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 15:43:13 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>In C++ gibt es höchstens <code>friend</code> :<br />
<a href="http://www.cplusplus.com/doc/tutorial/inheritance/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/inheritance/</a></p>
<p>Grüssli</p>
</blockquote>
<p>friend ist die stärkste bindung in C++, sogar noch stärker als Vererbung - das sollte man nicht mit einem Zugriffsspezifizierer zwischen public und protected vergleichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Es geht hier nicht um das normales <code>public</code> und <code>protected</code> . Es geht hier um Dinge wie <code>internal</code> aus C#. Mit <code>internal</code> gibst du das Ding dem Ganzen Programm bekannt, das ist deutlich heftiger als <code>friend</code> . <code>friend</code> ist da geradezu schwach im Vergleich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: Für die, welche kein C# kennen, mag das vielleicht seltsam klingen, deshalb noch eine Ergänzung:<br />
<code>internal</code> ist wie <code>public</code> , für zum Beispiel die eigene DLL. Für den Anwender der DLL ist es allerdings wie ein <code>private</code> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19854">@Siassei</a>,<br />
Ich würde, wie Nexus schon sagte, sehr vorsichtig mit sowas umgehen. Normalerweise muss man sowas gar nicht erst machen in C++. Auch in C# und Java sind solche Mittel eigentlich eher selten.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718326</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 May 2009 15:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sat, 30 May 2009 21:59:47 GMT]]></title><description><![CDATA[<p>friend wurde ja schon erwähnt. Davon abgesehen...</p>
<p>In C++ kann man sich auch oft helfen, indem man gewisse Header-Files einfach nicht &quot;public&quot; macht.<br />
Wenn das nicht geht, weil man die &quot;internen&quot; Klassen in &quot;public&quot; Header-Files z.T. vollständig definiert braucht, macht man normalerweise einfach &quot;Detail&quot; Namespaces.</p>
<p>Der &quot;User-Programmer&quot; kann die Klassen in solchen &quot;Detail&quot; Namespaces zwar verwenden wenn er unbedingt will. Aber es sollte allgemein bekannt sein, dass man von sowas die Finger lassen sollte. D.h. wer es tut, und sich damit Probleme einhandelt, ist hübsch selbst schuld.</p>
<p>In C++ kann man es so oder so nicht verhindern dass sich jmg. ins Knie schiesst. &quot;Detail&quot; Namespaces sind daher eigentlich recht schön &quot;C++ konform&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718466</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 30 May 2009 21:59:47 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 09:00:38 GMT]]></title><description><![CDATA[<blockquote>
<p>In C++ kann man es so oder so nicht verhindern dass sich jmg. ins Knie schiesst. &quot;Detail&quot; Namespaces sind daher eigentlich recht schön &quot;C++ konform&quot;</p>
</blockquote>
<p>Naja. Imho ist es besser ein Sprachkonstrukt zu haben, um falsches verwenden unmöglich zu machen, als davon auszugehen, dass es richtig benutzt wird. Schliesslich muss die falsche Benutzung ja nicht immer unbedingt Absicht sein. Darum ist ja <code>const</code> so ein mächtiges Werkzeug. Da gibt es ja viele Situationen, in denen man erst durch den Compiler auf eine falsche Benutzung aufmerksam gemacht würde und dann ist man dem Entwickler der Bibliothek sehr dankbar, dass er mitgedacht hat.<br />
Aber als Abhilfe ist &quot;detail&quot; wahrscheinlich schon das sinnvollste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718551</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 31 May 2009 09:00:38 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 12:01:43 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Naja. Imho ist es besser ein Sprachkonstrukt zu haben, um falsches verwenden unmöglich zu machen, als davon auszugehen, dass es richtig benutzt wird.</p>
</blockquote>
<p>Das ist ja das Schwierige. <code>const</code> ? Wird mit <code>const_cast</code> geknackt. <code>private</code> ? Da reicht <code>#define private public</code> .</p>
<p>Von <code>detail</code> -Namensräumen halte ich etwa das Gleiche. Wie gross ist die Wahrscheinlichkeit, dass man <strong>unabsichtlich</strong> in den Namensraum <code>xyz::detail</code> eindringt? Und wenn man es mit Absicht tut, ist einem sowieso nicht mehr zu helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718589</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 31 May 2009 12:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 12:23:14 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Naja. Imho ist es besser ein Sprachkonstrukt zu haben, um falsches verwenden unmöglich zu machen, als davon auszugehen, dass es richtig benutzt wird.</p>
</blockquote>
<p>Das ist ja das Schwierige. <code>const</code> ? Wird mit <code>const_cast</code> geknackt. <code>private</code> ? Da reicht <code>#define private public</code> .</p>
<p>Von <code>detail</code> -Namensräumen halte ich etwa das Gleiche. Wie gross ist die Wahrscheinlichkeit, dass man <strong>unabsichtlich</strong> in den Namensraum <code>xyz::detail</code> eindringt? Und wenn man es mit Absicht tut, ist einem sowieso nicht mehr zu helfen.</p>
</blockquote>
<p>Naja.. Das sind Sachen, mit denen man explizit etwas umgeht. <code>const_cast</code> besagt das ja alleine mit dem Namen und über defines reden wir hier gar nicht erst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Aber man könnte ohne es zu wissen auf die Idee kommen detail für sich selbst zu gebrauchen und dann kann es schnell zu Fehler kommen:</p>
<pre><code class="language-cpp">//irgend eine lib
namespace detail
{
	void foo ()
	{
	}
};

//meine lib
namespace detail
{
	void foo ();

	void b ()
	{
		foo ();
	}
};
</code></pre>
<p>Jetzt mag man sagen, dass, wenn man ein foo selber benutzen will, man es ja bestimmt irgendwo definiert haben muss. Aber dann könnte ja das hier passiert sein:</p>
<pre><code class="language-cpp">//meine lib
namespace detail
{
        //implementier ich später
	void foo ();

	void b ()
	{
		foo ();
	}
};
</code></pre>
<p>Und schon hat man den graus. Man muss ja nicht bei einfachen Konstrukten vorsichtig sein, sondern alles in Betracht ziehen, was ein übermüdeter und gestresster Programmierer so verbauen kann. Und das Beispiel finde ich gar nicht einmal so weit hergeholt, da, wie schon erwähnt detail sehr oft ja genau für das gebraucht wird und dann kann das schnell passieren. (vor allem in Verbindung mit <code>using</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718600</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 31 May 2009 12:23:14 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 12:32:02 GMT]]></title><description><![CDATA[<p>Naja, möglich ist es schon, aber meiner Ansicht nach kein allzu bedenklicher Fehler. Zumal dort, wo bei dir &quot;irgendeine lib&quot; bzw. &quot;meine lib&quot; steht, normalerweise auch noch Namensräume drum herum stehen. Und über <code>using namespace</code> brauchen wir glaube ich auch nicht zu reden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Abgesehen davon besteht natürlich auch die Möglichkeit, einen komplizierteren, aber einzigarten Namensraum-Bezeichner zu wählen (auch wenn ich das unnötig finde, insbesondere wenn dieser selber in einem Namensraum steht). Aber man darf dann natürlich keinesfalls Boost verwenden. <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/1718605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718605</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 31 May 2009 12:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 12:48:44 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Zumal dort, wo bei dir &quot;irgendeine lib&quot; bzw. &quot;meine lib&quot; steht, normalerweise auch noch Namensräume drum herum stehen. Und über <code>using namespace</code> brauchen wir glaube ich auch nicht zu reden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Warum nicht? - Die using Direktive ist sehr hilfreich und manchmal unabdingbar. (z.B boost::lambda) und wenn du das in deinem eigenen Namensraum brauchen willst, dann passiert genau das oben.</p>
<p>Ob das ganze ein neues Schlüsselwort rechtfertig sei dahingestellt, aber ich beuge einem möglichem Problem lieber im vornherein vor, als, dass ich mich darauf verlasse, dass etwas richtig benutzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718614</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 31 May 2009 12:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 12:54:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a>,<br />
Du machst meiner Meinung nach einen Denkfehler. Es geht hier nicht um globale <code>detail</code> Namensräume, sondern um solche:</p>
<pre><code class="language-cpp">namespace libA
{

// ...

namespace detail
{
  // ...

} // detail

// ...

} // ::libA
</code></pre>
<p>Es geht also um Namensräume wie <code>::libA::detail</code> oder <code>::libB::detail</code> . Oder zum Beispiel Boost Detailnamensräume:</p>
<ul>
<li><code>::boost::filesystem::detail</code></li>
<li><code>::boost::spirit::classic::detail</code></li>
</ul>
<p>Und <code>using namespace</code> sollte man mit äusserster Vorsicht verwenden, das wurde nun schon zig tausend Mal gesagt. Nur weil man zu faul ist drei Buchstaben mehr zu schreiben, sollte man nicht die Namensräume global aushebeln. Wenn du sie aushebelst, dann höchstens lokal in einer Funktion. Oder über <code>using</code> nur eine einzelne Funktion oder Klasse holen.</p>
<p>Wenn es durch ein <code>using namespace</code> in einem solchen Fall zu einem Fehler kommt, dann ist das für mich gleichbedeutend, als wenn du <code>const_cast</code> oder <code>#define private public</code> gemacht hättest.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718616</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 31 May 2009 12:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 13:25:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Und using namespace sollte man mit äusserster Vorsicht verwenden, das wurde nun schon zig tausend Mal gesagt.</p>
</blockquote>
<p>Das ist klar, aber wie schon gesagt kann es sein, dass man es braucht (lambda) und ich benutze es auch (vor allem in Verbindung mit boost) sehr gerne, weil ich keine Lust habe jedesmal boost::filesystem::xxx zu schreiben. Das ist auch nicht gerade für die Leserlichkeit förderlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718632</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 31 May 2009 13:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 13:35:34 GMT]]></title><description><![CDATA[<p>Trotzdem würde ich versuchen (auch für Lambda-Ausdrücke), möglichst lokale <code>using</code> s zu verwenden. Dann gerät man auch nicht in Konflikt mit eigenen Namensräumen, da auf globaler Ebene nichts verunreinigt ist.</p>
<p>Ausserdem kann man ja auch sowas machen:</p>
<pre><code class="language-cpp">namespace fs = boost::filesystem;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1718637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718637</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 31 May 2009 13:35:34 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 13:36:39 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das ist klar, aber wie schon gesagt kann es sein, dass man es braucht (lambda) und ich benutze es auch (vor allem in Verbindung mit boost) sehr gerne, weil ich keine Lust habe jedesmal boost::filesystem::xxx zu schreiben. Das ist auch nicht gerade für die Leserlichkeit förderlich.</p>
</blockquote>
<p>Dann gäbe es immer noch:</p>
<pre><code class="language-cpp">namespace fs = boost::filesystem;
</code></pre>
<p>Oder eben die lokale Nutzung:</p>
<pre><code class="language-cpp">void foo()
{
  using namespace boost::filesystem;

  // ...
}
</code></pre>
<p>Oder die einzelne <code>using</code> Anweisung:</p>
<pre><code class="language-cpp">void foo()
{
  using boost::lambda::_1;

  // ...
}
</code></pre>
<p>Alles bereits viel besser, als den globalen Namensraum zuzumüllen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718640</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 31 May 2009 13:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 13:57:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Alles bereits viel besser, als den globalen Namensraum zuzumüllen.</p>
</blockquote>
<p>Joa, klar. Es ist auch besser smart Pointer, const, std::string, keine defines usw. zu benutzen, aber gemacht wirds trotzdem. Und wenn man eine falsche Benutzung bereits im vornherein verhindern kann, dann ist das doch eine gute Sache, oder etwa nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718648</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 31 May 2009 13:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 14:19:28 GMT]]></title><description><![CDATA[<p>Dinge zu verhindern, welche falsch genutzt werden, ist ein Ding der Unmöglichkeit. Wenn du anfängst so zu programmieren, dann kann man dein Programm am Ende gar nicht mehr benutzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Es ist auch nicht die Aufgabe des Autors einer Bibliothek, dafür zu sorgen, dass der Programmierer die Bibliothek richtig verwendet. Es ist sinnvoll, wenn der Autor dafür sorgt, dass die falsche Benutzung erschwert wird, allerdings ist mit einem <code>detail namespace</code> dafür eigentlich schon zur genüge gesorgt.</p>
<p>Wer nicht sinnvoll mit Namensräumen umgehen kann, der ist nunmal einfach selber Schuld oder noch ein Anfänger und muss halt noch lernen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718655</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 31 May 2009 14:19:28 GMT</pubDate></item><item><title><![CDATA[Reply to Scope ala (package, internal) in C++ möglich? on Sun, 31 May 2009 19:28:13 GMT]]></title><description><![CDATA[<p>Ich wollte hier nicht &quot;bewerben&quot; es dem Programmierer leicht zu machen, etwas falsch zu verwenden.<br />
Ich meine lediglich dass man es einerseits in C++ nie wirklich wasserdicht hinbekommt, und dass es andrerseits oft viel zu viel Aufwand wäre (bzw. ganz unmöglich) alles mit &quot;friend&quot; zu machen.</p>
<p>Daher finde ich &quot;Detail&quot; Namespaces eine gute Möglichkeit. Vor allem weil das eine Konvention ist, die nun wirklich fast jeder kennen sollte. Bzw. ist es auch nicht schwer draufzukommen was gemeint ist, wenn man sowas noch nie gesehen hat.</p>
<p>Schliesslich kommt ja auch wohl keiner auf die Idee _TreeBase (oder wie genau die Klasse heisst) aus der MSVC Standard-Library Implementierung zu verwenden. Und die Klassen leben noch nichtmal in einem Detail Namespace.</p>
<p>----</p>
<p>Die einzige Möglichkeit, die mir jetzt einfällt, wie mit Detail Namespaces unabsichtlich etwas passieren könnte, ist ADL (aka. Koenig Lookup). Und selbst da kann ich im Moment kein gutes Beispiel konstruieren. Und natürlich beschränkt sich das &quot;Problem&quot; ADL auch nicht auf Detail Namespaces. Nicht umsonst wird boost::noncopyable in einem eigenen Namespace definiert, und dann nur per &quot;using&quot; in den &quot;boost&quot; Namespace gezogen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718799</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 31 May 2009 19:28:13 GMT</pubDate></item></channel></rss>