Dies ist eine Nachfolge von Vector of pairs with generic vector and pair type, template of template.Stxxl Vektor als Tropfenersatz für Std :: Vektor
Ich möchte in der Lage sein, ein Verfahren zu nennen einem mit std::vector
oder stxxl:vector
, während Vorlage Argumente des vector
(Paares x, y) festgelegt sind.
Insbesondere die Methode signatrue könnte wie folgt aussehen:
template<typename t_x, typename t_y,
template<typename, typename> class t_pair,
template<typename...> class t_vector>
method(t_vector<t_pair<t_x,t_y>> &v)
Leider, wenn die Signatur wie diese Angabe, ist es nicht möglich ist, ein stxxl:vector
als t_vector
passieren. Es führt zu dem folgenden Compiler-Fehler:
sad.hpp:128:5: note: template argument deduction/substitution failed:
program.cpp:104:52: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class t_vector’
method(coordinates);
^
program.cpp:104:52: error: expected a type, got ‘4u’
program.cpp:104:52: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class t_vector’
program.cpp:104:52: error: expected a type, got ‘2097152u’
Die Frage, wie ist stxxl::vector
als Drop-in-Ersatz die Methodensignatur, um in der Lage zu ändern, um Code std::vector
vorhandenen zu benutzen?
Update auf, warum ich verschachtelte Vorlagen für den Vektor verwende: Ich könnte mich irren, aber ich möchte den Compiler, der für die Variablen in der oben genannten Methode eingibt.
Ich zum Beispiel bin den Aufbau einer vector
oder ein queue
std::vector<t_x> intervals(k * k + 1);
typedef std::tuple<std::pair<t_x,t_y>,std::pair<t_x,t_y>, std::pair<t_x,t_y>, uint> t_queue;
std::queue <t_queue> queue;
die entweder uint32_t or uint64_t
je nachdem, ob die Art der Paarelemente ist uint32_t or uint64_t
Warum müssen Sie die Vorlagenparameter so spezifizieren? Warum nicht einfach einen einfachen Typnamen t_vector ohne all die anderen Parameter verwenden? Einen Template-Template-Parameter zu haben, ist nützlich, wenn Sie diesen Template-Parameter verwenden, um verschiedene Typen zu konstruieren, aber in Ihrem Fall verwenden Sie ihn nur mit einem Typ, der 't_pair' ist. – Holt
Ich benutze Uint32_t und Uint64_t als Vorlage Parameter des Paares. Ich verwende daher t_x/t_y in meinem Code, um zu entscheiden, ob 32/64 Bit-Ganzzahlen verwendet werden sollen. –
Ich sehe nicht wirklich, warum Ihnen die Vorlage so hilft, wie Sie es mit der einfachen Form machen? Können Sie Ihre Frage aktualisieren, um uns genau zu zeigen, warum Sie solche Vorlagenparameter benötigen (und warum das einfachere Formular für Sie nicht funktioniert)? – Holt