Desambigua el término "función auxiliar". Una definición es una función de conveniencia que usa todo el tiempo solo para hacer un trabajo. Esos pueden vivir en el espacio de nombres principal y tener sus propios encabezados, etc. La otra definición de función auxiliar es una función de utilidad para una sola clase o familia de clases.
// 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
Ahora isPrinter
está disponible para cualquier código, incluido su encabezado, pero print_alignment_page
requiere una
using namespace printer_utils::Xerox;
directiva. También se puede referirlo como
Canon::print_alignment_page();
para ser más claro
El STL de C ++ tiene el std::
espacio de nombres que cubre casi todas sus clases y funciones, pero las divide categóricamente en más de 17 encabezados diferentes para permitir que el codificador elimine los nombres de clase, nombres de funciones, etc. si quieren escribir los suyos
De hecho, NO se recomienda usar using namespace std;
en un archivo de encabezado o, como se hace a menudo, como la primera línea dentro main()
. std::
es de 5 letras y, a menudo, parece una tarea rutinaria para introducir la función que uno quiere usar (¡especialmente std::cout
y std::endl
!) pero tiene un propósito.
El nuevo C ++ 11 tiene algunos espacios de nombres secundarios para servicios especiales como
std::placeholders,
std::string_literals,
std::chrono,
std::this_thread,
std::regex_constants
que se puede traer para su uso.
Una técnica útil es la composición del espacio de nombres . Uno define un espacio de nombres personalizado para contener los espacios de nombres que necesita para su .cpp
archivo en particular y usarlo en lugar de un conjunto de using
declaraciones para cada cosa en un espacio de nombres que pueda necesitar.
#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;
// ...
Esta técnica limita la exposición al conjunto std:: namespace
(¡ es grande! ) Y permite escribir código más limpio para las líneas de código más comunes que las personas escriben con más frecuencia.
static
palabra clave?