ich nach einem Weg suchen, die eine Klasse zu formulieren:Konvertieren von STL-Container <T *> zu Container <T const *>
- ein Schnittstelle STL-Container von Zeigern mit maximaler ‚Konstantheit‘ mit
- aber dem intern die spitzen mutiert -zu-Objekte
- ohne zusätzlichen Laufzeitaufwand im Vergleich zu einem nicht konstanten analogen
Idealerweise wäre die Lösung ohne ext kompiliert Ra-Code gegenüber der nicht-const-Version, da const/non-const-ness nur eine Hilfe für Programmierer ist.
Hier ist, was ich versucht habe, so weit:
#include <list>
#include <algorithm>
using namespace std;
typedef int T;
class C
{
public:
// Elements pointed to are mutable, list is not, 'this' is not - compiles OK
list<T *> const & get_t_list() const { return t_list_; }
// Neither elements nor list nor' this' are mutable - doesn't compile
list<T const *> const & get_t_list2() const { return t_list_; }
// Sanity check: T const * is the problem - doesn't compile
list<T const *> & get_t_list3() { return t_list_; }
// Elements pointed to are immutable, 'this' and this->t_list_ are
// also immutable - Compiles OK, but actually burns some CPU cycles
list<T const *> get_t_list4() const {
return list<T const *>(t_list_.begin() , t_list_.end());
}
private:
list<T *> t_list_;
};
Wenn es keine Lösung für die Typumwandlung ist, würde ich alternative Vorschläge mag, wie beschrieben eine Klasse mit den Eigenschaften zu formulieren.
'T const' ist nicht einfach in' T' konvertierbar, man muss 'const_cast' verwenden, aber das ist hässlich und verletzt den Punkt von' const. –
@Tony Ich möchte "T" in "T const" umwandeln, was normalerweise möglich ist. Die folgenden Kompilierungen: 'int x = 2; int const * x_ptr = & x; ' – SimonD
Verschiedene Template-Spezialisierungen sind nicht verwandt, sie sind effektiv unterschiedliche Typen. – Xeo