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.

È stato utile?

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.

Altri suggerimenti

forse è possibile utilizzare lo stile C descrittori File al posto di istream e poi "convertito" in C ++ flusso,

Penso che si possa utilizzare le risposte in questo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top