Я переписываю оболочку C вокруг API Python C (Python 1.5) и заметил, что функция Py_VaBuildValue использует переменное число аргументов. Я задавался вопросом, нужно ли мне использовать то же самое в моей оболочке функции C ++, чтобы перейти к этой функции, или есть ли более C ++ способ справиться с этим?
Я знаю, что вариадические функции могут быть причиной неисчислимых проблем, поэтому я бы предпочел не использовать их, если есть лучший способ.
EDIT:
Итак, вот код C, который мне нужно превратить в функцию C ++:
int Set_Global(char *modname, char *varname, char *valfmt, ... /* cval(s) */) {
int result;
PyObject *module, *val; // "modname.varname = val"
va_list cvals;
va_start(cvals, valfmt); // C args after valfmt
module = Load_Module(modname); // get/load module
if (module == NULL)
return -1;
val = Py_VaBuildValue(valfmt, cvals); // convert input to Python
va_end(cvals);
if (val == NULL)
return -1;
result = PyObject_SetAttrString(module, varname, val);
Py_DECREF(val); // set global module var
return result; // decref val: var owns it
}
Итак, я делаю ту же функцию с помощью std :: string вместо char * и хочу изменить многоточие на что-то более похожее на c ++, которое затем я могу передать Py_VaBuildValue внутри функции.