2009-07-30 13 views
3
namespace A 
{ 
    #include <iostream> 
}; 

int main(){ 
A::std::cout << "\nSample"; 
return 0; 
} 
+2

haben Sie keinen Compiler auf Sie? –

+2

Warum willst du das machen? – AraK

Antwort

8

Kurze Antwort: Nein.

Lange Antwort: Nun, nicht wirklich. Sie können es jedoch fälschen. Sie können es außerhalb erklären und mit Anweisungen innerhalb der Namespace verwenden, wie folgt aus:

#include <iostream> 

namespace A 
{ 
    using std::cout; 
}; 

int main(){ 
A::cout << "\nSample"; 
system("PAUSE"); 
return 0; 
} 

Sie können eine Bibliothek lokalisieren, denn selbst wenn sie den Zugang in eine hätte, würde es keinen Zugang im Standard-Namespace verfügen. Das andere Problem besteht darin, dass die qualifizierten Namen im Namespace A :: std :: cout wären, aber die Bibliothek keine Namen enthalten würde, die mit dem äußeren Namespace qualifiziert sind. "

Danke, Jonathan Leffler.

Wenn das Problem ist, dass Sie andere Leute nicht wissen lassen wollen, was all Ihr Code kann, können Sie Ihre eigene cpp-Datei haben, um iostream einzuschließen und den Namespace dort zu definieren. Dann fügen Sie das einfach in main (oder was auch immer) ein und lassen Sie den Programmierer wissen, was er kann und was nicht.

+2

Das andere Problem besteht darin, dass die qualifizierten Namen im Namespace A :: std :: cout lauten, die Bibliothek jedoch keine Namen enthält, die mit dem äußeren Namespace qualifiziert sind. –

+1

Sehr guter Punkt, danke. Hinzugefügt. +1 – jkeys

5

Sie könnten schreiben:

#include <vector> // for additional sample 
#include <iostream> 
namespace A 
{ 
    namespace std = std; // that's ok according to Standard C++ 7.3.2/3 
}; 

// the following code works 
int main(){ 
A::std::cout << "\nSample"; // works fine !!! 
A::std::vector<int> ints; 
sort(ints.begin(), ints.end()); // works also because of Koenig lookup 

std::cout << "\nSample"; // but this one works also 
return 0; 
}

Thit Ansatz Namespace Aliasing genannt wird. Wirklicher Zweck für dieses Feature zeigte im folgenden Beispiel:

namespace Company_with_very_long_name { /* ... */ } 
namespace CWVLN = Company_with_very_long_name; 

// another sample from real life 
namespace fs = boost::filesystem; 
void f() 
{ 
    fs::create_directory("foobar"); // use alias for long namespace name 
}
Verwandte Themen