Estoy de acuerdo con los demás: está pidiendo conflictos de nombres, ambigüedades y el hecho es que es menos explícito. Si bien puedo ver el uso deusing
, mi preferencia personal es limitarlo. También consideraría fuertemente lo que otros señalaron:
Si desea encontrar un nombre de función que podría ser un nombre bastante común, pero solo desea encontrarlo en el std
espacio de nombres (o al revés, desea cambiar todas las llamadas que no están en el espacio de nombres std
, espacio de nombres X
, ...), entonces, ¿cómo propones hacer esto?
Podrías escribir un programa para hacerlo, pero ¿no sería mejor pasar tiempo trabajando en tu proyecto en lugar de escribir un programa para mantenerlo?
Personalmente, en realidad no me importa el std::
prefijo. Me gusta más el aspecto que no tenerlo. No sé si eso es porque es explícito y me dice "este no es mi código ... estoy usando la biblioteca estándar" o si es otra cosa, pero creo que se ve mejor. Esto podría ser extraño dado que recientemente ingresé a C ++ (usé y sigo haciendo C y otros lenguajes durante mucho más tiempo y C es mi lenguaje favorito de todos los tiempos, justo encima del ensamblaje).
Hay otra cosa, aunque está algo relacionada con lo anterior y lo que otros señalan. Si bien esto podría ser una mala práctica, a veces me reservo std::name
para la versión estándar de la biblioteca y el nombre para la implementación específica del programa. Sí, de hecho, esto podría morderte y morderte duro, pero todo se reduce a que comencé este proyecto desde cero, y soy el único programador para ello. Ejemplo: lo sobrecargo std::string
y lo llamo string
. Tengo adiciones útiles. Lo hice en parte debido a mi tendencia de C y Unix (+ Linux) hacia los nombres en minúsculas.
Además de eso, puede tener alias de espacio de nombres. Aquí hay un ejemplo de dónde es útil que podría no haber sido mencionado. Yo uso el estándar C ++ 11 y específicamente con libstdc ++. Bueno, no tiene std::regex
soporte completo . Claro, se compila, pero arroja una excepción en el sentido de que es un error al final del programador. Pero es falta de implementación.
Así que así es como lo resolví. Instale la expresión regular de Boost y vincúlela. Luego, hago lo siguiente para que cuando libstdc ++ lo haya implementado por completo, solo necesito eliminar este bloque y el código permanece igual:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
No discutiré si es una mala idea o no. Sin embargo, argumentaré que lo mantiene limpio para mi proyecto y al mismo tiempo lo hace específico: es cierto, tengo que usar Boost, pero lo estoy utilizando como libstdc ++ eventualmente lo tendrá. Sí, comenzar su propio proyecto y comenzar con un estándar (...) al principio ayuda mucho al mantenimiento, el desarrollo y todo lo relacionado con el proyecto.
Solo para aclarar algo: en realidad no creo que sea una buena idea usar el nombre de una clase / lo que sea en el STL deliberadamente y más específicamente en lugar de. La cadena es la excepción (ignore el primero, el anterior o el segundo aquí, haga un juego de palabras si es necesario) para mí, ya que no me gustó la idea de 'String'.
Tal como están las cosas, todavía estoy muy sesgado hacia C y hacia C ++. Ahorrando detalles, gran parte de lo que trabajo encaja más en C (pero fue un buen ejercicio y una buena manera de hacerme a. Aprender otro idioma yb. Tratar de no estar menos predispuesto contra el objeto / clases / etc., lo que tal vez sea mejor dicho como menos cerrado de mente, menos arrogante y más tolerante). Pero lo que es útil es lo que algunos ya sugirieron: de hecho uso la lista (es bastante genérica, ¿no es así?), Y clasifico (lo mismo) para nombrar dos que causarían un choque de nombres si lo hiciera using namespace std;
, y así para ello prefiero ser específico, tener el control y saber que si pretendo que sea el uso estándar, tendré que especificarlo. En pocas palabras: no se permite suponer.
Y en cuanto a hacer parte de la expresión regular de Boost std
. Lo hago para una futura integración y, una vez más, admito que esto es parcial, no creo que sea tan feo como boost::regex:: ...
. De hecho, eso es otra cosa para mí. Hay muchas cosas en C ++ que todavía tengo que aceptar completamente en miradas y métodos (otro ejemplo: plantillas variadas versus argumentos var [¡aunque admito que las plantillas variadas son muy, muy útiles!]). Incluso aquellos que sí acepto fueron difíciles, y todavía tengo problemas con ellos.