templates und linker problem
-
Hallo,
wollte nur kurz eine Sammlung für das STL-for_each machen (zum probieren).
namespace STLHelper { template< typename T> CallDeleteOnPointers(T item) { delete item; } }; int main() { /*********************************************/ STLHelper::CallDeleteOnPointers<int*>(0); /*********************************************/ vector<int*> vInts; vector<int*>::iterator iter = vInts.begin(); vInts.push_back(new int(1)); for_each(iter, vInts.end(), STLHelper::CallDeleteOnPointers<int*>); return 0; }
Wenn ich die Zeile zwischen den ** weglasse bekomme ich ein nichtaufgelöstes Symbol.
Kann ich dem compiler irgendwie (anders) sagen das er bitte diese funktion erstellen soll? Der Workaround oben hilft nix.
-
Hallo,
ich wuerde das so machen:
template<typename T> struct CallDeleteOnPointers { void operator()(T pointer) { delete pointer; } }; int main() { vector<int*> vInts; vInts.push_back(new int(1)); vector<int*>::iterator iter = vInts.begin(); for_each(iter, vInts.end(), CallDeleteOnPointers<int*>()); return 0; }
mfg
v R
-
was hälst du davon, noch weniger schreibarbeit
template< typename Container_> void CleanContainer(Container_ &t) { typename Container_::iterator it; for(it = t.begin(); it != t.end(); ++it) delete *it; t.clear(); } // aufruf CleanContainer(vInts);
-
Danke,
die Lösung funktioniert und ist obendrein noch ein bißchen sauberer ich vergesse das for_each wohl besser... (zuviel C# gemacht)
Trotdem verunsichert mich die tatsache, das ich offensichtlich generell keine pointer auf templatefunktionen übergeben kann, oder?