Posted on 2011-05-27 07:35
RTY 阅读(246)
评论(0) 编辑 收藏 引用 所属分类:
转载随笔
这是一个普通的混合使用方式, 但这种方式不能达到脚本真正的灵活性, c++每个属性必须绑定一个唯一的set和get接口提供给python内部访问这个属性
C/C++ code:
class sample
{
public:
int m_obj;
int GetValue(){
return m_obj;
}
void SetValue(int v){
m_obj= v;
}
};
class_<sample>("sample")
.add_property("m_obj", &sample::GetValue, &sample::SetValue )
我看过一个公司做的一个系统使用自己开发的python插件模块实现了非常灵活的c++与python交互
这个系统有一个配置文件, 其中定义着一些属性和接口, 在系统启动时会去分析这些配置然后把它们
建立在python中, 用户在python中对这些配置定义的属性赋值都会被c++所截获
下面是按照我的设想去做, 当然下面代码不能运行 因为不支持这样的方式。
用户在配置文件定义了3个属性
int obj1, float obj2, string obj3
把它们绑定到一个通用的接口上
.add_property("obj1", &bind(&sample::GetValue, 1), &bind(&sample::SetValue, 1 ) )
.add_property("obj2", &bind(&sample::GetValue, 2), &bind(&sample::SetValue, 2 ) )
.add_property("obj3", &bind(&sample::GetValue, 3), &bind(&sample::SetValue, 3 ) )
class sample
{
public:
PyObject* m_objList;
int GetValue(int id);
void SetValue(int id, PyObject *val);
};
int sample::getValue( int id ){
return m_objList.find(id);
}
void sample::SetValue(int id, PyObject *val){
// 这里拿到被改变的数据 传输到另一网络上
...
// 将值赋给那个对象。
m_objList.find(id) = val;
}
这样当一个属性被改变, c++就可以获得所被改变的数据, 然后做一些相关的逻辑处理, 比如将所改变的数据网络传输到另一端机器上。
我查了很多资料 用boost都无法实现(也许我还没了解), 所以来寻求一下大家的技术支持, 给一点建议。