Ativando classes para uso com boost :: lexical_cast

Snippet 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;
}

Baseado emdocument,

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

1> Retorna o resultado do streaming de arg em um fluxo baseado em string da biblioteca padrão e depois sai como um objeto Targe

2> A fonte é OutputStreamable

3> O destino é InputStreamable

Questão > Para o Tipo Definido pelo Usuário (UDT), o OutputStreamable ou InputStreamable sempre deve lidar comstd::string? Por exemplo, dada uma classe que contém um número inteiro simples como variável de membro, quando definimos ooperator<< eoperator>>, como é o código de implementação? Preciso converter o número inteiro como uma string? Com base no meu entendimento, parece que a UDT sempre tem que lidar comstd::string para trabalhar comboost::lexical_cast eboost::lexcial_cast precisa do intermediáriostd::string para realizar os trabalhos de conversão reai

Questão > Por que o valor de retorno deoperator<< ouoperator>> no código acima não é referência astd::ostream& oustd::istream& respectivamente?

questionAnswers(1)

yourAnswerToTheQuestion