Estoy trabajando con una API de bajo nivel que acepta un char*
y un valor numérico para representar una cadena y su longitud, respectivamente. Mi código usa std::basic_string
y llama a estos métodos con la traducción adecuada. Desafortunadamente, muchos de estos métodos aceptan longitudes de cadena de tamaño variable (es decir, max (unsigned char
), máximo (short
), etc.) y estoy atascado escribiendo código para asegurarme de que las instancias de cadenas no exceden la longitud máxima prescrita. por la API de bajo nivel.¿Se puede aprovechar std :: basic_string para implementar una cadena que tenga una limitación de longitud?
Por defecto, la longitud máxima de una instancia std::basic_string
está obligado por el valor máximo de size_t
(ya sea max (unsigned int
) o max (__int64
)). ¿Hay alguna forma de manipular los rasgos y las implementaciones de asignadores de una implementación de std::basic_string
para que pueda especificar mi propio tipo para usar en lugar de size_t
? Al hacerlo, espero aprovechar las comprobaciones de límites existentes dentro de la implementación std::basic_string
, por lo que no tengo que hacerlo al realizar la traducción.
Mi investigación inicial sugiere que esto no es posible sin necesidad de escribir mi propia clase string, pero espero que me daba algo :)
Hubiera agregado un parámetro de plantilla int y tenía max_size() return N; luego puede hacer typedef std :: basic_string , my_allocator > my256string; –
jmucchiello
Creo que exponer 'size_type' como un argumento de plantilla sería beneficioso, ya que entonces el usuario es libre de elegir qué' size_type' es más adecuado para una instancia de cadena dada. Entonces, la especialización de plantilla parcial ayudará a hacer que este tipo juegue bien con 'basic_string'. –