Ich erweitere Python mit C ++ - Code.
Eine der Funktionen, die ich verwende, hat die folgende Signatur:
%Vor%(Link: Ссылка )
Der Parameter von Interesse ist kwlist. Im obigen Link finden Sie Beispiele zur Verwendung dieser Funktion. In den Beispielen sieht kwlist wie folgt aus:
%Vor%Wenn ich dies mit g ++ kompiliere, bekomme ich die Warnung:
%Vor%Also kann ich das statische char * in ein statisches const char * ändern. Leider kann ich den Python-Code nicht ändern. Mit dieser Änderung bekomme ich einen anderen Kompilierungsfehler (kann char ** nicht in const char ** umwandeln). Basierend auf dem, was ich hier gelesen habe, kann ich Compiler-Flags aktivieren, um die Warnung zu ignorieren, oder ich kann jede der konstanten Zeichenfolgen in der Definition von kwlist in char * umwandeln. Momentan mache ich Letzteres. Was sind andere Lösungen?
Entschuldigung, wenn diese Frage schon einmal gestellt wurde. Ich bin neu.
Erwartet PyArg_ParseTupleAndKeywords()
, die Daten, die Sie übergeben, zu ändern? Normalerweise zeigt in idiomatischem C ++ ein const <something> *
auf ein Objekt, von dem der Angerufene nur liest, während <something> *
auf ein Objekt zeigt, in das der Angerufene schreiben kann.
Wenn PyArg_ParseTupleAndKeywords()
erwartet, dass Sie in die char *
schreiben können, die Sie übergeben, haben Sie ein völlig anderes Problem als das, was Sie in Ihrer Frage erwähnt haben.
Unter der Annahme, dass PyArg_ParseTupleAndKeywords
seine Parameter nicht ändern möchte, wäre es die idiomatisch korrekte Vorgehensweise, kwlist als const char *kwlist[]
zu deklarieren und const_cast
zu verwenden, um seine Konstante beim Aufruf von PyArg_ParseTupleAndKeywords()
zu entfernen. Das würde es so aussehen lassen:
Es gibt eine akzeptierte Antwort von vor sieben Jahren, aber ich möchte eine alternative Lösung hinzufügen, da dieses Thema immer noch relevant zu sein scheint.
Wenn Sie die const_cast
-Lösung nicht mögen, können Sie auch eine schreibbare Version des String-Arrays erstellen.
Der char name[] = ".."
kopiert Ihre Zeichenfolge an einen schreibbaren Speicherort.
Tags und Links python c const-char