Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27313
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 61
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-23 22:14
个人简介

写点东西,不用太寂寞

文章分类

全部博文(2)

文章存档

2014年(2)

我的朋友

分类: C/C++

2014-11-25 23:20:35

加权排序是一个常用且简单的功能,一个compare函数就可以很完美的实现,但是如果每个用户的加权方式不一样,那就另当别论了。
很自然的想到让用户自己写脚本语言来实现特殊化的加权排序。
Python虚拟机可以很方便的在C++中运行,只要可以export一些变量到Python脚本中,可以很方便的实现加权排序。

下面介绍如何导出一些变量到Python中,执行脚本后得到答案

导入思想:  __main__是Python中的匿名模块,脚本可以直接使用__main__中的变量

点击(此处)折叠或打开

  1.         Py_Initialize();
  2.         boost::python::str pythonStr = "Pixx2 = Pixx * Pixx\n""result = 8.1 + Pixx2/2 > 11";
  3.         try{
  4.                 float Pixx = 3.25987;
  5.                 boost::python::object mainModule = import("__main__");
  6.                 boost::python::object main_namespace = mainModule.attr("__dict__");
  7.                 mainModule.attr("Pixx") = Pixx;  // 将Pixx导出到Python的__main__模块中
  8.                 boost::python::object retv = boost::python::exec(pythonStr, main_namespace);  
  9.                 bool val = boost::python::extract<bool>(main_namespace["result"]);
  10.                 printf("%s\n", val?"true":"false");
  11.         }catch(...){
  12.                 PyErr_Print();
  13.         }


阅读(3166) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~