2011-03-31 3 views
3

나는 부스트 파이썬을 사용하고 있습니다. 인수에 클래스 CL_DomElement을 사용하는 함수를 내 보냈습니다. 이제 앱을 실행하면 다음과 같은 메시지가 표시됩니다.형식을 파이썬으로 변환

TypeError: No to_python (by-value) converter found for C++ type: CL_DomElement 

코드는 어떻게됩니까? 인수에 함수 포인터를 사용하는 함수를 내 보냈습니다.

typedef boost::function<boost::shared_ptr<Object> (CL_DomElement*, std::string& desc)> Parser; 
void registerParser(std::string type, Parser p); 

struct ParserProxy 
{ 
    bp::object callable; 

    ParserProxy(bp::object callable) 
    : callable(callable) 
    { } 

    boost::shared_ptr<Object> operator()(CL_DomElement* elem, std::string& desc) 
    { 
     bp::object obj = callable(elem, desc); 
     return bp::extract<boost::shared_ptr<Object> >(obj); 
    } 
}; 

void registerParserByProxy(std::string type, bp::object callable) 
{ 
    registerParser(type, ParserProxy(callable)); 
} 

// In some boost.python module 
bp::def("RegisterParser", registerParserByProxy); 

나는 (파이썬에서) 그것은이 방법 등록 : 여기에 코드입니다 그것은 성공적으로 등록

class TestObj(Object): 
    @staticmethod 
    def ParseTestObj(node, desc): 
     print 'Parser is called!' 
# Register parser 
RegisterParser("testobj", TestObj.ParseTestObj) 

가, 내가 (파서 표준 : 맵에 전달 키 → 값을 추가 등록 내지도를 확인) 그리고 모든 것이 괜찮습니다 (새로운 가치가 추가되었습니다). 지금은 통과 포인터를 호출 할 :

boost::shared_ptr<Object> TypesManager::parseObject(CL_DomElement* objectTag, const std::string &type, std::string &desc) 
{ 
    return (getParser(type))(objectTag, desc); 
} 

getParser 반환에게 키 type와 표준 : :지도에서 함수 포인터를. 내가 통과 클래스 CL_DomElement에 문제를 이해 그래서


. 하지만 내 모듈에서 않았다 :

bp::class_<CL_DomElement>("CL_DomElement"); 

나는 이것이 내가 설명한 그런 오류를 막아서는 안된다고 생각한다. 그래서, 무엇이 잘못 되었나요?

답변

관련 문제