Disambiguieren Sie den Begriff "Hilfsfunktion". Eine Definition ist eine Komfortfunktion, die Sie ständig verwenden, um bestimmte Aufgaben zu erledigen. Diese können im Hauptnamensraum leben und ihre eigenen Header usw. haben. Die andere Helferfunktionsdefinition ist eine Dienstprogrammfunktion für eine einzelne Klasse oder Klassenfamilie.
// a general helper
template <class T>
bool isPrinter(T& p){
return (dynamic_cast<Printer>(p))? true: false;
}
// specific helper for printers
namespace printer_utils {
namespace HP {
print_alignment_page() { printAlignPage();}
}
namespace Xerox {
print_alignment_page() { Alignment_Page_Print();}
}
namespace Canon {
print_alignment_page() { AlignPage();}
}
namespace Kyocera {
print_alignment_page() { Align(137,4);}
}
namespace Panasonic {
print_alignment_page() { exec(0xFF03); }
}
} //namespace
Now isPrinter
ist für jeden Code einschließlich seines Headers verfügbar, print_alignment_page
erfordert jedoch eine
using namespace printer_utils::Xerox;
Direktive. Man kann es auch als bezeichnen
Canon::print_alignment_page();
klarer zu sein.
Die C ++ STL verfügt über den std::
Namespace, der fast alle Klassen und Funktionen abdeckt, teilt sie jedoch kategorisch in über 17 verschiedene Header auf, damit der Codierer die Klassennamen, Funktionsnamen usw. aus dem Weg räumen kann, wenn er schreiben möchte ihre eigenen.
Tatsächlich wird NICHT empfohlen, sie using namespace std;
in einer Header-Datei oder, wie so oft, als erste Zeile im Inneren zu verwenden main()
. std::
besteht aus 5 Buchstaben und scheint oft eine lästige Pflicht zu sein, die Funktion, die man verwenden möchte (besonders std::cout
und std::endl
!), vorzustellen, aber sie erfüllt einen Zweck.
Das neue C ++ 11 enthält einige Subnamespaces für spezielle Dienste wie
std::placeholders,
std::string_literals,
std::chrono,
std::this_thread,
std::regex_constants
das kann zur Verwendung gebracht werden.
Eine nützliche Technik ist die Namespace-Komposition . Einer definiert einen benutzerdefinierten Namespace, der die Namespaces enthält, die Sie für Ihre bestimmte .cpp
Datei benötigen, und verwendet diese anstelle einer Reihe von using
Anweisungen für jedes Element in einem Namespace, das Sie möglicherweise benötigen.
#include <iostream>
#include <string>
#include <vector>
namespace Needed {
using std::vector;
using std::string;
using std::cout;
using std::endl;
}
int main(int argc, char* argv[])
{
/* using namespace std; */
// would avoid all these individual using clauses,
// but this way only these are included in the global
// namespace.
using namespace Needed; // pulls in the composition
vector<string> str_vec;
string s("Now I have the namespace(s) I need,");
string t("But not the ones I don't.");
str_vec.push_back(s);
str_vec.push_back(t);
cout << s << "\n" << t << endl;
// ...
Diese Technik begrenzt die Exposition gegenüber dem Ganzen std:: namespace
( sie ist groß! ) Und ermöglicht es, saubereren Code für die häufigsten Codezeilen zu schreiben, die am häufigsten geschrieben werden.
static
Keyword erfahren ?