Schauen Sie sich diesen Code an.Benennen Sie std :: vector in eine andere Klasse um, um sie zu überladen?
#include <vector>
template<class ...Args>
using other_vector = std::vector<Args...>;
template<class T>
void f(std::vector<T>&) {}
template<class T>
void f(other_vector<T>&) {}
int main()
{
other_vector<int> b;
f(b);
return 0;
}
Es kompiliert nicht, weil f
neu deklariert wird. Ich verstehe den Fehler vollkommen. Allerdings brauche ich eine zweite Klasse, die sich wie std::vector<T>
verhält, aber als ein anderer Typ betrachtet wird, so dass eine Überladung, wie im obigen Beispiel, legal wäre.
Was könnte ich tun?
- Lassen Sie die neue Klasse
std::vector<T>
als Basisklasse haben. Dies könnte funktionieren, aber nicht von Standardcontainern erben. - Lassen Sie die neue Klasse ein Member vom Typ std :: vector haben und dann alle Funktionen neu deklarieren, um die Funktionen des Members umzuleiten. Klingt nach viel Arbeit.
Jede bessere Alternative? C++ 11 oder C++ 14 erlaubt.
Werfen Sie einen Blick auf 'BOOST_STRONG_TYPEDEF'. Wenn es nicht mit Vorlagen funktioniert, könnten Sie sich wahrscheinlich inspirieren lassen, etwas zu machen, das funktioniert. – chris
Sind Sie sicher, dass Sie zwei Funktionen für fast den gleichen Typ benötigen? – StoryTeller
Versuchen Sie die Vererbung. –