A
krümelkacker schrieb:
audacia schrieb:
Ich habe einigen Code, der sowas macht:
template <typename T, template <typename T> class ContT>
static void pushBackOrFree (ContT<T*>& cont, T* value);
Was du hättest schreiben sollen:
template <typename T, class Cont>
static void pushBackOrFree (Cont& cont, T* value);
Das wäre schon hier nicht mehr ausreichend gewesen:
template <typename T, template <typename T> class ContT>
static void destroy(ContT<T*>& cont)
{
for (ContT<T*>::iterator i = cont.begin (), e = cont.end (); i != e; ++i)
i->~T ();
}
Andererseits, vielleicht hätte ich
template <typename T, template Cont>
static void destroy(Cont& cont)
{
for (Cont::iterator i = cont.begin (), e = cont.end (); i != e; ++i)
i->~Cont::value_type ();
}
schreiben können. Werde ich mal probieren.
dot schrieb:
Wieso genau muss es eigentlich ein template template Parameter sein?
Das war in einem anderen Fall, da fand ich es eleganter,
MyTrie<char, PayloadType, std::basic_string>
MyTrie<std::string, PayLoadType, std::vector>
schreiben zu können anstelle von
MyTrie<char, PayloadType, std::string>
MyTrie<std::string, PayLoadType, std::vector<std::string> >
.