Habilitación de clases para usar con boost :: lexical_cast

ragmento de código de lexical_cast:

class lexical_castable {
public:
  lexical_castable() {};
  lexical_castable(const std::string s) : s_(s) {};

  friend std::ostream operator<<
    (std::ostream& o, const lexical_castable& le);
  friend std::istream operator>>
    (std::istream& i, lexical_castable& le);

private:
  virtual void print_(std::ostream& o) const {
    o << s_ <<"\n";
  }

  virtual void read_(std::istream& i) const {
    i >> s_;
  }

  std::string s_;
};

std::ostream operator<<(std::ostream& o,
  const lexical_castable& le) {
  le.print_(o);
  return o;
}

std::istream operator>>(std::istream& i, lexical_castable& le) {
  le.read_(i);
  return i;
}

Residencia endocument,

template<typename Target, typename Source>
  Target lexical_cast(const Source& arg);

1> Devuelve el resultado de la transmisión de argumentos en una secuencia de biblioteca estándar basada en cadenas y luego como un objeto de destino.

2> La fuente es OutputStreamable

3> El objetivo es InputStreamable

Pregunta > Para el tipo definido por el usuario (UDT), si OutputStreamable o InputStreamable siempre tienen que tratar constd::string? Por ejemplo, dada una clase que contiene un entero simple como variable miembro, cuando definimos laoperator<< yoperator>>, ¿cómo es el código de implementación? ¿Tengo que convertir el entero como una cadena? Según mi comprensión, parece que UDT siempre tiene que lidiar constd::string para trabajar conboost::lexical_cast yboost::lexcial_cast necesita el intermediostd::string para realizar los trabajos de conversión reales.

Pregunta > ¿Por qué el valor de retorno deoperator<< ooperator>> en el código anterior no hace referencia astd::ostream& ostd::istream& respectivamente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta