gpt4 book ai didi

c++ - 将类型转换为 python

转载 作者:太空狗 更新时间:2023-10-29 23:09:21 25 4
gpt4 key购买 nike

我正在使用 boost python。我导出了一些在参数中采用类 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);

我是这样注册的(在 python 中):

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

它成功注册,我检查了我的映射(注册解析器将传递的键→值添加到 std::map 中)并且那里一切都很好(添加了新值)。现在我想调用传递的指针:

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

getParser 从 std::map 返回带有键 type 的函数指针。


所以,据我所知,传递类 CL_DomElement 有问题。但是我在我的模块中做了:

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

我认为这不应该防止我描述的此类错误。那么,怎么了?

最佳答案

关于c++ - 将类型转换为 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5500952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com