如果我试图重载嵌入式Python函数,以便第二个参数可以是long或Object,那么有一种标准的方法吗?这是吗?
我现在正在尝试(更改名称以保护无辜者):
bool UseLongVar2 = true;
if (!PyArg_ParseTuple(args, "ll:foo", &LongVar1, &LongVar2))
{
PyErr_Clear();
if (!PyArg_ParseTuple(args, "lO&:foo", &LongVar1, convertObject, &Object))
{
UseLongVar2 = false;
return NULL;
}
}
答案 0 :(得分:3)
我通常做的是有两个带有不同参数的C函数。 “python-facing”函数的工作是解析参数,调用适当的C函数,并构建返回值(如果有的话)。
例如,当您想要允许字节和Unicode字符串时,这是很常见的。
这是我的意思的一个例子。
// Silly example: get the length of a string, supporting Unicode and byte strings
static PyObject* getlen_py(PyObject *self, PyObject *args)
{
// Unpack our argument (error handling omitted...)
PyObject *arg = NULL;
PyArg_UnpackTuple(args, "getlen", 1, 1, arg) ;
if ( PyUnicode_Check(arg) )
{
// It's a Unicode string
return PyInt_FromLong(getlen_w(PyUnicode_AS_UNICODE(arg))) ;
}
else
{
// It's a byte string
return PyInt_FromLong(getlen_a(PyString_AS_STRING(arg))) ;
}
}