0
我有C++工厂类,它应该在Python脚本中使用:未定义引用本地变量
class CCommandFactory {
private:
typedef std::map<std::string, IAbstractCommandCreator*>::iterator factory_iter;
static std::map<std::string, IAbstractCommandCreator*> m_factory;
public:
template<class T>
static void add(const std::string& id) {
factory_iter it = m_factory.find(id);
if (it == m_factory.end()) {
m_factory[id] = new CCommandCreator<T>();
}
}
static ICommand* create(const std::string& id, boost::python::list args) {
factory_iter it = m_factory.find(id);
if (it != m_factory.end()) {
std::list<std::string> arguments;
for (int i = 0; i < len(args); ++i) {
arguments.push_back(boost::python::extract<std::string>(args[i]));
}
return it->second->create(arguments);
}
return 0;
}
~CCommandFactory() {
for (factory_iter it = m_factory.begin(); it != m_factory.end(); ++it) {
if (it->second) {
delete it->second;
}
}
}
};
这是包装:
BOOST_PYTHON_MODULE(libfrtpsrv)
{
class_<CCommandFactory, boost::noncopyable>("CCommandFactory", no_init)
.def("create_command", &CCommandFactory::create, args("cmd_id", "args"), return_value_policy<manage_new_object>())
.staticmethod("create_command")
;
}
代码看起来对我来说是正确的,但是在python脚本的执行失败在最开始:
Traceback (most recent call last):
File example.py, line 1, in <module>
import wrapper
File .../wrapper.py, line 4, in <module>
from libfrtpsrv import *
ImportError: .../daemon/libfrtpsrv.so: undefined symbol: _ZN15CCommandFactory9m_factoryE
我不知道如何来解决这个问题。