用Python函数扩展C++ 我有一个C++应用程序。为了通过脚本给用户更多的动态控制,我选择在代码中嵌入一些python。FI,我的用户不热衷于学习和编写任何C++,所以共享LIB是不可能的。C++代码将在运行时调用Python中的用户定义函数。p>
例如:用户将编写以下python函数。当然,在实践中,用户提供的函数定义比简单的add要复杂一些用Python函数扩展C++ 我有一个C++应用程序。为了通过脚本给用户更多的动态控制,我选择在代码中嵌入一些python。FI,我的用户不热衷于学习和编写任何C++,所以共享LIB是不可能的。C++代码将在运行时调用Python中的用户定义函数。p>,python,c++,embed,Python,C++,Embed,例如:用户将编写以下python函数。当然,在实践中,用户提供的函数定义比简单的add要复杂一些 def userAdd(a, b): return a+b C++代码使用以下函数调用UsRead。我需要使用不同的a、b集多次运行evalUserFunc。这种方法与调用硬编码C++函数相比有多慢?我看到一个.pyc在执行时生成。是不是有些类似于A的东西?所以在C++中?先谢谢你 float myClass::evalUserFunc(float a, float b) { P
def userAdd(a, b):
return a+b
C++代码使用以下函数调用UsRead。我需要使用不同的a、b集多次运行evalUserFunc。这种方法与调用硬编码C++函数相比有多慢?我看到一个.pyc在执行时生成。是不是有些类似于A的东西?所以在C++中?先谢谢你
float myClass::evalUserFunc(float a, float b)
{
PyObject *pFunc, *pArgs;
PyObject *pa, *pb, *pValue;
int res = 0;
if (_pModule != NULL) {
pFunc = PyObject_GetAttrString(_pModule, 'userAdd');
pArgs = PyTuple_New(2);
pa = PyFloat_FromDouble(a);
pb = PyFloat_FromDouble(b);
PyTuple_SetItem(pArgs, 0, pa);
PyTuple_SetItem(pArgs, 1, pb);
pValue = PyObject_CallObject(pFunc, pArgs);
res = PyFloat_AsDouble(pValue);
}
return res;
}
性能影响足以鼓励不经常跨越本机脚本边界。执行用户编写的代码确实很危险,不仅因为它可能会破坏您的程序,而且因为经验丰富的恶意用户可能会造成一些实际损害。我建议你用其他方法来解决你的问题,或者干脆删除这个功能。还有其他的选择吗?