2012-04-27 58 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