@Zuzu_Typ: Also bei der Template-Funktion hast Du ja am Ende eine konkrete Funktion mit einer festen Anzahl von Argumenten wenn das Template zur Übersetzungszeit ausgewertet wurde. Und eventuell sogar gar keine Funktion wenn der Compiler die paar Additionen einfach „inlined“.
Also so etwas wie
[codebox=cpp file=Unbenannt.cpp]int x = adder(42, 23, 4711);[/code]
wird dann ja zu einer Funktion:
[codebox=cpp file=Unbenannt.cpp]int adder(int a, int b, int c) {
return a + b + c;
}[/code]
Wobei man den Namen der Funktion aus `ctypes`-Sicht allerdings nicht kennt, denn C++-Compiler veranstalten da ja üblicherweise noch „name mangling“ um Namensräume und Funktionsüberladungen möglich zu machen.
In Python ausgedrückt könnte das eventuell so aussehen:
Code: Alles auswählen
def adder(*args):
return sum(*args)
def create_adder(c_type, argument_count)
return CFUNCTYPE(c_type, *([c_type] * argument_count))(adder)
adder3 = create_adder(c_int, 3)
Variadische C-Funktionen kann man mit `ctypes` nicht in Python schreiben. Das gibt die zugrundeliegende `libffi` nicht her. Wenn man das wirklich benötigt, kommt man um eine kleine C-Hilfsfunktion nicht herum, die daraus einen Aufruf einer nicht-variadischen Funktion macht.