2012-04-27 62 views
0

例如我有一个Python函数,我想转换为C++(或从C++调用,但我不想依赖python解释器) 简单的python函数不能理解shedskin生成的代码

//test.py 
def my_sum(x,y): 
    print "Hello World!" 
    return x*x+y 

我跑shedskin并有

//test.cpp 
#include "builtin.hpp" 
#include "test.hpp" 

namespace __test__ { 


str *__name__; 



void __init() { 
    __name__ = new str("__main__"); 

} 

} // module namespace 

int main(int, char **) { 
    __shedskin__::__init(); 
    __shedskin__::__start(__test__::__init); 
} 

//test.hpp 
#ifndef __TEST_HPP 
#define __TEST_HPP 

using namespace __shedskin__; 
namespace __test__ { 



extern str *__name__; 



} // module namespace 
#endif 

丑陋的代码,也没有我的功能my_sum和代码依赖于“builtin.hpp”。是否有可能只转换功能?

我想从我的C调用函数++代码类似 INT总和= py.my_sum(3,5); 我该怎么做?

也许我可以做Python代码DLL或者Lib,我可以在C++代码中使用?

+0

我们目前知道的唯一可以可靠地将代码从一种语言翻译成另一种语言的人是人。 – geekosaur 2012-04-27 08:59:47

+2

@geekosaur:曾听过编译器? – 2012-04-27 09:02:13

+1

@FerdinandBeyer,请关掉迂腐的过滤器。对于这个问题,有些语言的翻译人员还有一些其他的语言(例如Fortran to C),这些语言并不太可怕......但是一般的Python到C++并不会很漂亮,正如这个问题所示。 – geekosaur 2012-04-27 09:05:35

回答

1

通知,shedskin警告给出了此程序:

*WARNING* test.py:1: function my_sum not called! 

它也是文件,对编译工作,功能应该被称为(直接或间接)中提到,因为它不可能否则请键入推理..如果确定my_sum参数的类型,如果甚至没有对它的单个调用, :-)

添加此,例如:

if __name__ == '__main__': 
    my_sum(1,1) 

使得my_sum出现在生成C++代码,其可以潜在地从另一C++程序调用。

+0

谢谢,你回答我的问题是正确的,不像其他人。但是在这种情况下,如何确定参数的类型仍然不清楚? (1,1)可以是float,int,double。 – mrgloom 2012-05-02 06:40:43

+1

单个python函数成为一个单一的C++函数,并根据函数的使用方式推导出类型。在这种情况下,它仅用于整数,所以它将变成基于整数的。如果你想要一个基于浮点的版本,请使用(1.0,1.0)。它也会接受整数,但总会返回一个浮点数(因为这是推导的返回类型)。 – srepmub 2012-05-03 20:21:35