Swig, C ++ 및 Ruby를 사용한 std :: Istream과의 $ stdin 호환성
문제
C ++에서 std :: istream을 입력으로 취하는 함수가 있습니다.
class Foo {
Foo(std::istream &);
}
Swig를 사용하여 Ruby에 묶었지만 Ruby의 $ stdin 변수는 C ++의 스트림 클래스와 근본적으로 다르므로 1) C ++ 클래스를 루비에 노출시키는 방법은 확실하지 않습니다. $ stdin 또는 2) $ stdin을 C ++ 클래스가 이해할 수있는 것으로 변환 할 수 있습니다.
누구든지 C ++의 ioStream을 Ruby에 바인딩 한 경험이 있습니까?
감사.
해결책
C 인터페이스 (예 : rb_funcall을 사용하여)를 통해 호출 된 $ stdin에서 루비 메소드로 작업을 구현하는 std :: istream 인스턴스를 사용할 수 있습니다. std :: istream 자체에서 수업을 도출함으로써 할 수는 없습니다. 왜냐하면 그 방법은 가상이 아니기 때문입니다. 대신 std :: stream_buf에서 파생하고 스트림 버퍼를 사용하는 Istream을 인스턴스화해야합니다.
다른 팁
C 스타일을 사용할 수 있습니다 파일 설명자 istream 대신 C ++ 스트림으로 "변환"하는 대신
나는 당신이 이것에서 답을 사용할 수 있다고 생각합니다 의문
제휴하지 않습니다 StackOverflow