문제

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 ++ 스트림으로 "변환"하는 대신

나는 당신이 이것에서 답을 사용할 수 있다고 생각합니다 의문

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top