Python zu C / C ++ const char Frage

8

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.

    
Eugene 08.04.2010, 15:32
quelle

2 Antworten

4

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:

%Vor%     
Timo Geusch 08.04.2010, 15:50
quelle
0

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.

%Vor%

Der char name[] = ".." kopiert Ihre Zeichenfolge an einen schreibbaren Speicherort.

    
sauerburger 29.11.2017 13:10
quelle

Tags und Links