2014-12-16 4 views
3

나는인쇄 부스트 파이썬 객체

py::object obj = whatever(); 

내가 정상 파이썬 규칙을 사용하여 인쇄 할 부스트 파이썬 객체를 가지고있다.

// I want the effect of print 'My object is ', obj 
std::cout << "My object is " << obj << std::endl; 

거대한 컴파일러 덤프로 컴파일되지 않습니다. 어떻게해야합니까?

+0

내가 Boost.Python와 그 익숙하지 않은,하지만 난 그것은'py :: object'에 대해 정의 된'operator << (ostream &)'를 가지고 있는지 확신하지 못합니다. – nneonneo

+2

아마도 당신은 인자로'obj'를 전달하는 파이썬의'str()'함수를 호출하고 반환 값을'std :: string'으로 변환하고 그것을 스트리밍하는 것과 동일한 코드를 작성하고 싶을 것입니다. 이 접근 방식을 사용하여 모든 파이썬 객체에 스트리밍 연산자를 제공하기 위해 자신 만의'operator << (ostream &, py :: object const &)'를 제공 할 수 있습니다. – cdhowie

답변

6

Boost.Python은 operator<<(ostream&, const object&)와 함께 제공되지 않지만 우리는 파이썬은 기본적으로 어떻게 할 것인지 모방하기 위해 우리 자신을 작성할 수 있습니다 str 전화 :

namespace py = boost::python; 

std::ostream& operator<<(std::ostream& os, const py::object& o) 
{ 
    return os << py::extract<std::string>(py::str(o))(); 
}