加权排序是一个常用且简单的功能,一个compare函数就可以很完美的实现,但是如果每个用户的加权方式不一样,那就另当别论了。
很自然的想到让用户自己写脚本语言来实现特殊化的加权排序。
Python虚拟机可以很方便的在C++中运行,只要可以export一些变量到Python脚本中,可以很方便的实现加权排序。
下面介绍如何导出一些变量到Python中,执行脚本后得到答案
导入思想: __main__是Python中的匿名模块,脚本可以直接使用__main__中的变量
-
Py_Initialize();
-
boost::python::str pythonStr = "Pixx2 = Pixx * Pixx\n""result = 8.1 + Pixx2/2 > 11";
-
try{
-
float Pixx = 3.25987;
-
boost::python::object mainModule = import("__main__");
-
boost::python::object main_namespace = mainModule.attr("__dict__");
-
mainModule.attr("Pixx") = Pixx; // 将Pixx导出到Python的__main__模块中
-
boost::python::object retv = boost::python::exec(pythonStr, main_namespace);
-
bool val = boost::python::extract<bool>(main_namespace["result"]);
-
printf("%s\n", val?"true":"false");
-
}catch(...){
-
PyErr_Print();
-
}
阅读(3166) | 评论(0) | 转发(0) |