2009-06-10 9 views
0

Ist es möglich, const Parameter zu verwenden, um CArrayCArray und const Template-Parameter

ich derzeit CArray wie dies benutzen, aber es wird nicht kompilieren:

typedef CArray<const CString, const CString&> data_container; 

Und ich bekomme immer diese Kompilierung-Fehler:

Fehler C2664: 'ATL :: Karo :: memcpy_s' : kann nicht Parameter 1 von 'const CString *' auf 'void *' konvertieren

Antwort

2

Der Code, den CArray verwendet, erwartet, dass Ihr TYPE nicht-const ist, sodass er in void * umgewandelt werden kann (wie in der Kompilierungsfehlermeldung angegeben).

Sie könnten const CString-Zeiger speichern, die Ihnen bei der Dereferenzierung einen konstanten CString geben würden. Sie haben jetzt die Last, diesen Speicher zuzuweisen/zu bereinigen. Eine Alternative besteht darin, einen CString in eine einfache Klasse zu schreiben, die über eine Funktion "GetString" verfügt, die eine Konstante const auf die interne CString-Instanz zurückgibt.

+0

Mit anderen Worten, CArrays können ihre Inhalte auf verschiedene Arten ändern (Laden von Serialisierung, Kopieren von einem anderen, usw.), so dass der Inhalt nicht const sein kann. – KSchmidt

+0

Gibt es eine Alternative, die const Inhalt erlauben würde? – Drahakar

+0

Siehe meine bearbeitete Antwort für einige Alternativen. – KSchmidt

0

Anscheinend nein. Warum willst du das machen?

+0

Diese CString sollen sich nicht ändern, also Const Nähte geeignet. – Drahakar

+0

Bedeutet das, dass Sie Einfügungen und Löschungen zulassen, aber keine Änderungen zulassen möchten? – avakar