Question

J'ai une fonction en C ++ qui prend un std :: iStream comme entrée:

class Foo {
    Foo(std::istream &);
}

En utilisant Swig, je l'ai lié à Ruby, mais la variable $ stdin de Ruby est fondamentalement différente de quelque chose comme les classes de flux en C ++, donc je ne sais pas comment 1) exposer la classe C ++ à Ruby d'une manière que je peut utiliser $ stdin, ou 2) convertir $ stdin en quelque chose que la classe C ++ peut comprendre.

Quelqu'un a de l'expérience avec la liaison iostreams en C ++ à Ruby?

Merci.

Était-ce utile?

La solution

Vous pouvez utiliser une instance de std :: iStream qui implémente ses opérations avec des méthodes Ruby sur $ stdin appelé via l'interface C (par exemple, en utilisant rb_funcall). Vous ne pouvez pas le faire en dérivant une classe de std :: iStream elle-même, car ses méthodes ne sont pas virtuelles; Au lieu de cela, vous devrez dériver de STD :: Stream_Buf et instancier un iStream qui utilise votre tampon de flux.

Autres conseils

Peut-être que vous pouvez utiliser le style C Descripteurs de fichiers au lieu d'Istream puis de le "convertir" en flux C ++,

Je pense que vous pouvez utiliser les réponses dans ce question

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top