primer lugar, si desea dar salida char
s (y todos de char
s), necesitará para usar ostreambuf_iterator<char>
y no ostream_iterator<string>
. Y ostreambuf_iterator<char>
expresa mejor que usted que ostream_iterator<char>
; está sacando char
s directamente, no formateando nada. (ostream_iterator
utiliza el operador <<
, que formatea.)
En segundo lugar, tenga en cuenta que no siempre es una TRADUCCIÓN Aquel a uno de inferior a superior (por ejemplo 'ß'
mapas a la secuencia de dos caracteres "SS"
en mayúsculas) , por lo que std::transform
no se puede usar realmente para hacer correctamente el trabajo . (Y, por supuesto, no maneja correctamente las codificaciones multibyte como UTF-8.) Para todos los usos menos simples, necesita algo más complicado que . Pero incluso para los casos más simples:
std::toupper
está sobrecargado: una de las sobrecargas es una plantilla, que toma dos argumentos, y la otra es una función que toma un solo int
; ninguno de los dos funcionará directamente aquí, y el hecho de que transform
es también significa que la resolución de sobrecarga y el tipo de plantilla de deducción no funcionarán aunque lo hicieran. Entonces, básicamente, tienes que agregar algo.Es posible utilizar la función de plantilla de 2 argumentos si agrega suficientes calificadores y usa boost::bind
o algo similar para enlazar el segundo argumento, pero es casi tanto texto como escribir un argumento funcional simple toupper
. Y no se puede utilizar el formulario único argumento (que se puede acceder de forma inequívoca si se incluyen <ctype.h>
y utilizar ::toupper
) porque ha indefinido comportamiento si se utiliza un char
como argumento cuando se llama a que: usted tiene que convertir el char
a unsigned char
primero (a menos que, por supuesto, el char
llano sea sin firmar en la implementación que está usando — y en todas las implementaciones a las cuales su código alguna vez se transporta).
Es importante publicar el error real que está recibiendo. En particular, en un comentario a la respuesta aceptada, ha agregado ese error, y eso a su vez dice que el problema es con la resolución de sobrecarga. En ese momento, con toda la información, las personas pueden dar una explicación clara de cuál es el problema y las diferentes maneras de resolverlo, en lugar de solo un trabajo que no lo ayudará con el siguiente problema similar (resolución de sobrecarga al usar una función en una plantilla) –
sí, me olvidé del error, lo siento – Kobe