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

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

ne pas avoir un compilateur sur vous? –

+2

Pourquoi voulez-vous faire cela? – AraK

Répondre

8

Réponse courte: Non

Réponse longue: Eh bien, pas vraiment. Vous pouvez simuler, cependant. Vous pouvez le déclarer à l'extérieur et utiliser l'aide d'instructions à l'intérieur de l'espace de noms, comme celui-ci:

#include <iostream> 

namespace A 
{ 
    using std::cout; 
}; 

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

Vous ne pouvez pas localiser une bibliothèque, parce que même si elle avait accès à A, il ne serait pas avoir accès à l'espace de noms standard. En outre, "L'autre problème est que les noms qualifiés dans l'espace de noms seraient A :: std :: cout, mais la bibliothèque ne contiendrait pas de noms qualifiés avec l'espace de nom externe." merci Jonathon Leffler. Si le problème est que vous ne voulez pas que les autres personnes sachent ce que tout votre code peut faire, vous pouvez avoir votre propre fichier cpp pour inclure iostream et avoir l'espace de noms défini ici. Ensuite, vous incluez juste cela dans le main (ou quoi que ce soit) et laissez le programmeur savoir ce qu'il peut et ne peut pas faire.

+2

L'autre problème est que les noms qualifiés dans l'espace de noms seraient A :: std :: cout, mais la bibliothèque ne contiendrait pas de noms qualifiés avec l'espace de nom externe. –

+1

Très bon point, merci. Ajoutée. +1 – jkeys

5

Vous pouvez écrire:

#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; 
}

approche Thit est appelée espace de noms aliasing. Le but réel de cette fonctionnalité a montré dans l'exemple suivant:

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 
}
Questions connexes