Ich versuche, einen Container zu implementieren, der einen bestimmten Datentyp enthält - nennen wir es C. Der Container (nennen wir es B) ist eine innere Klasse von A. Ich versuche, die Vorlage zu deklarieren aber ich stoße auf Compilerprobleme und bin mir nicht sicher, was ich tun soll.Vorlage einer Klasse, die eine Konstante-Typ-Vorlage enthält?
Versuche
template <typename T<C>>
class A
{
class B
{
typedef std::unique_ptr<T> containerPtr;
private:
containerPtr container;
}
}
typedef std::shared_ptr<A<std::vector<C>>> somePtr; // Error!
Der Fehler ist:
struct C
Typname
nicht erlaubt ist
template <typename T,U>
class A
{
class B
{
typedef std::unique_ptr<T<U>> containerPtr;
private:
containerPtr container; // But does it contain C or some other type now?
// We have to do a check - what's the best approach?
}
}
typedef std::shared_ptr<A<std::vector<C>>> somePtr;
Was ist der beste Ansatz in dieser Situation?
Wow - Ich wollte deine Antwort akzeptieren, bevor du mir die extra editierte Antwort gegeben hast. Du hast meine Gedanken gelesen, was ich tun wollte. Vielen Dank! (Ich versuchte den zweiten Versuch, entschied aber zögerlich, dass ich mich mit dem ersten zufrieden geben würde) Können Sie erklären, was die '' tut? –
OneRaynyDay
@OneRaynyDay Der allgemeine Ansatz hier wird als * Template-Template-Argument * bezeichnet - wir stellen eine Vorlage als Argument für eine Vorlage zur Verfügung. Die Notation 'template Klasse T>' bedeutet "das Argument ist eine Template-Klasse mit dem Namen' T', und es ist uns egal, wie viele Argumente diese Template-Klasse benötigt. " –
templatetypedef
Ah, danke! Und danke, dass du mir gerade den Namen der Technik gesagt hast - ich merke, dass ich mit Templates festhalte, hauptsächlich weil ich nicht weiß, was ich googeln soll. Ich schätze es sehr. – OneRaynyDay