compatibilità stdin $ con std :: istream utilizzando sorso, C ++, e Ruby
Domanda
Ho una funzione C ++ che prende in uno std :: istream come input:
class Foo {
Foo(std::istream &);
}
Utilizzando SWIG, ho legato a Ruby, ma variabile $ stdin di Ruby è fondamentalmente diverso da qualsiasi cosa come le classi stream in C ++, quindi non sono sicuro di come sia 1) esporre la classe C ++ a Ruby in un modo che posso usare $ stdin, o 2) convertire $ stdin in qualcosa la classe C ++ può capire.
Qualcuno ha esperienza con iostreams in C ++ legame con Ruby?
Grazie.
Soluzione
È possibile utilizzare un'istanza di std :: istream che implementa le sue operazioni con i metodi di Ruby on $ stdin chiamati attraverso l'interfaccia C (per esempio, utilizzando rb_funcall). Non si può fare che derivando una classe da std :: istream sé, perché i suoi metodi non sono virtuali; invece è necessario derivare da std :: stream_buf e istanziare un istream che utilizza il buffer di flusso.