gpt4 book ai didi

python - 我如何在 Python 中包装 printf C++ 函数

转载 作者:行者123 更新时间:2023-11-28 06:36:24 27 4
gpt4 key购买 nike

我会在 Python 中包装一个 printf c++ 函数。我使用 s 和 lStringFormat 在 PyArg_ParseTuple 中传递格式字符串。但是我怎样才能传递另一个值呢?收到之前我不认识他们。

例如我会写

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, ...);

}

对我有什么建议吗?

谢谢大家!

最佳答案

无法将数组、列表、存储元组的 PyObject 或任何其他普通数据结构可移植地转换为适合 printfvprintf 的可变长度参数列表 或任何类似的功能。特别是,不可能将像 printfPy 这样的非可变参数函数转换为可变参数函数的通用包装器。为了使用动态确定类型的动态确定数量的参数调用类似 printf 的函数,函数必须在其参数列表中包含 ...,或者以某种方式获取 va_list 类型的对象,而该对象又只能从某个函数的参数列表中的 ... 构造。 (根本不可能以这种方式调用 printf 本身。虽然只能调用 v... 函数族中的一个,例如 vprintf ,但仍然必须从某些函数参数列表中的 ... 开始。)

合理(但不是普遍)的可移植解决方案将涉及第三方库,如 libffi。对于初学者来说可能并不容易。

由于问题被标记为 C++:有一些方法可以几乎完全避免在 C++ 中使用 C 样式的可变长度函数参数列表,除非此类函数出现在您需要支持的第三方库中。使用 C++ 替代 printf 和 friend ,并编写您自己的函数来接受标准容器而不是可变长度参数列表。

关于python - 我如何在 Python 中包装 printf C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26711744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com