que tienen una plantilla de clase similar a la que sigue a continuación que está diseñado para incluir algunos valores de configuración utilizados al analizar archivos CSV:soportes Evitar de plantilla de clase Tener Parámetro
template <typename InputIterator = default_all>
class icsv_params
{
// Iterator to a data structure containing the columns
// that should be read.
typedef InputIterator iterator;
// This is a bitmask type.
typedef detail::icsv_op icsv_op;
static const icsv_op noqt = icsv_op(detail::csv_flags::noqt);
static const icsv_op quot = icsv_op(detail::csv_flags::quot);
static const icsv_op mmap = icsv_op(detail::csv_flags::mmap);
// The rest of the class definition isn't relevant.
};
Ahora, el parámetro de plantilla es importante cuando el usuario desea suministrar iteradores de inicio y final a una estructura de datos que contiene los números de las columnas que deben analizarse; sin embargo, si el usuario no proporcionara los iteradores como parámetros, la clase debería asumir automáticamente que todas las columnas deben ser analizadas.
En el segundo caso, el código para declarar una instancia de la clase parece difícil de manejar:
icsv_params<> params(...);
Además, los tipos de máscara de bits noqt
, quot
y mmap
son utilizados por solamente esta clase, así que tiene sentido ponerlos dentro de la definición de la clase; Sin embargo, si el usuario desea utilizar estas máscaras de bits tipos, el código para hacerlo también es difícil de manejar:
icsv_params<> params(icsv_params<>::noqt);
¿Cómo puedo hacerlo de modo que el usuario no necesita proporcionar los soportes angulares para indicar la ausencia de un parámetro de plantilla? Si no hay manera de hacerlo, ¿qué alternativa sugerirías?
de función no necesitan los soportes. Asumiendo C++ 0x, el código de usuario puede hacer 'auto params = some_factory_function (...);'. –