2014-11-03 49 views
0

我打包printf c++函数Python。我使用s和lStringFormat在PyArg_ParseTuple中传递格式字符串。但我怎么能通过其他价值?收到之前我不认识他们。如何在Python中封装printf C++函数

比如我会写

int years = 30 
printfPy("I am %d old", years) 

包装这个样子....

static PyObject* PrintfPy(PyObject *self, PyObject *args) 
{ 
    char* lStringFormat; 

    if (!PyArg_ParseTuple(args, "s...", &lStringFormat, ...)) 
     return NULL; 

    sprintf(lStringFormat, ...); 

} 

我什么建议吗?

谢谢大家!

回答

1

无法将数组,列表,存储元组的PyObject或任何其他常规数据结构可移植地转换为适合于printfvprintf或任何类似函数的可变长度参数列表。尤其是不可能把像printfPy非可变参数功能分为通用包装的可变参数的功能。为了使调用一个printf样函数的动态确定类型的参数动态确定数量,一个函数必须或者在它的参数列表中有...,或以某种方式得到va_list类型的对象的保持,这反过来又可以只能从某个函数的参数列表中的...构建而成。 (这是不可能调用printf本身这样的。人们只能叫v...家庭的功能之一,虽然,如vprintf,但人们仍然必须从...在一些功能参数列表开始。)

一个合理的(但不是普遍的)便携式解决方案将涉及像libffi这样的第三方库。初学者可能不容易。

由于这个问题被标记为C++:有办法避免C风格的可变长度的函数的参数列表在C++中几乎完全,除非这些函数都需要支持第三方库。使用C++替代printf和朋友,并编写自己的函数来接受标准容器,而不是可变长度参数列表。

+0

给予好评,因为我今天学到了新的东西 – Anzel 2014-11-03 12:11:48