Actualmente estoy creando un conjunto de funciones comunes (implementaciones de algoritmos de búsqueda), y creo que estoy haciendo una agrupación incorrecta. Por el momento, tengo una clase, clasificación, que se declara en un archivo llamado Sorting.h (que está muy lejos de terminado todavía, por cierto), así:Creando un contenedor 'cosa' en C++ para mantener las funciones estáticas. ¿Qué debería ser "cosa"?
#ifndef SORTING_H
#define SORTING_H
#include <vector>
class Sorting {
private:
Sorting();
Sorting(const Sorting& orig);
virtual ~Sorting();
public:
static void bubbleSort(std::vector<int>& A);
// etc
};
#endif /* SORTING_H */
Ahora, debido a que el constructor es privado, un usuario no puedo crear una instancia de mi clase; de hecho, es solo un titular de funciones estáticas que el usuario puede llamar. Sin embargo, por lo que he leído de C++ hasta ahora, y de ver las bibliotecas de STL, etc., creo que estoy haciendo esto mal. ¿Debería, en cambio, tener un espacio de nombre llamado 'Clasificación' o algo por el estilo? Si es así, ¿qué aspecto tiene mi archivo de encabezado (el que el usuario incluiría)? ¿Y tendría que cambiar la estructura del resto de los archivos? Por el momento, cada conjunto de algoritmos se encuentra en su propio archivo cpp (es decir, BubbleSort.cpp, CocktailSort.cpp, etc.).
Disculpas por lo que podría ser una pregunta duplicada: busqué C++ y espacio de nombres, pero recibí preguntas muy generales sobre espacios de nombres y ninguno parecía ser este problema específico.
'(Iterator first, Iterator last)', para ilustración. – Potatoswatter
Gracias. Voy a pasar a las plantillas pronto, solo estaba tratando de descubrir cómo se puede saber si una clase/primitiva con plantilla es comparable en C++, es decir, cómo sé que funcionará cuando se le llame "<", etc. ¿O es algo que debería preocupar al usuario final? Como otra pregunta, aquí pones cocktail_sort y bubble_sort en la misma declaración de espacio de nombres. ¿Puedo usar varios archivos separados para esto? – Stephen
@DeadMG: dos sugerencias: 1. Los nombres de tipo generalmente describen el tipo de iteradores necesarios, p. 'RandomAccessReadableWriteableIterator' o' ForwardReadableWriteableIterator'. 2. Como alternativa a los iteradores, puede usar rangos, que son más flexibles y fáciles de usar. – Philipp