2012-04-27 3 views
0

, например, у меня есть функция в Python, что я хочу, чтобы преобразовать в C++ (или вызвать из C++, но я не хочу зависеть от питона интерпретатора) простая функция питонане может понять код, который 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); как я могу это сделать?

или

может быть, я могу сделать DLL или Lib из питона кода, который можно использовать в C++ кода?

+0

Единственное, что мы в настоящее время знаем о том, что может надежно переводить код с одного языка на другой, - это человек. – geekosaur

+2

@geekosaur: Когда-нибудь слышали о компиляторах? –

+1

@FerdinandBeyer, отбросьте фильтр педантизма, пожалуйста. В этом отношении есть переводчики с некоторых языков на некоторые другие языки (например, Fortran на C), которые не слишком ужасны ... но общий Python для C++ не будет хорош, как показано в этом вопросе. – geekosaur

ответ

1

уведомление предупреждение, что shedskin дает для этой программы:

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

он также упоминается в документации, что для компиляции на работу, функция должна быть вызвана (прямо или косвенно), так как это не представляется возможным do type input иначе .. как определить типы аргументов my_sum, если нет даже одного вызова к нему ..? :-)

добавив это, например:

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

делает my_sum появляются в сгенерированном коде C++, которые потенциально могут быть вызваны из другой программы на C++.

+0

спасибо, вы ответили правильно на мой вопрос, а не как другие. Но все еще неясно, как в этом случае shedskin определяет тип аргументов? (1,1) может быть float, int, double. – mrgloom

+1

Одна функция python становится единственной функцией C++, с типами, выведенными из того, как используется функция. в этом случае он используется только с целыми числами, поэтому он станет целочисленным. если вы хотите использовать версию с плавающей точкой, используйте (1.0, 1.0).он также будет принимать целые числа, но всегда будет возвращать float (так как это выводимый тип возврата). – srepmub

Смежные вопросы