Also, was ich will, ist multidimensionalen Vektor bestimmter Typ zu schaffen, wo die erste Dimension Größe des ersten Arguments eines Funktionsaufruf hat, etc, zum Beispiel, wenn ichErstellen n-dimensionalen Vektor mit bestimmten Größen
tunstd::size_t n = 5;
auto x = make_vector<int>(n + 1, n * 2, n * 3);
x
sollte 6x10x15 3D-Array sein (von Nullen aus, weil ich jetzt auf dem Standard konstruieren will)
ich habe versucht, dies:
template <typename T>
std::vector<T> make_vector(std::size_t size) {
return std::vector<T>(size);
}
template <typename T, typename... Args>
auto make_vector(std::size_t first, Args... sizes) -> std::vector<decltype(make_vector<T>(sizes...))> {
auto inner = make_vector<T>(sizes...);
return std::vector<decltype(inner)>(first, inner);
}
Es scheint, für 1 oder 2 Argumente zu arbeiten, aber für 3 Argumente wird mit Fehler folgenden (Klirren ++)
In file included from /Users/riad/ClionProjects/for-jhelper/output/run.cpp:1:
/Users/riad/ClionProjects/for-jhelper/tasks/TaskC.cpp:12:12: error: no matching function for call to 'make_vector'
auto x = make_vector<int>(n + 1, n * 2, n * 3);
^~~~~~~~~~~~~~~~
/Users/riad/ClionProjects/for-jhelper/tasks/../spcppl/make_vector.hpp:9:6: note: candidate template ignored: substitution failure [with T = int, Args = <unsigned long, unsigned long>]: call to function 'make_vector' that is neither visible in the template definition nor found by argument-dependent lookup
auto make_vector(std::size_t first, Args... sizes) -> std::vector<decltype(make_vector<T>(sizes...))> {
^ ~~~~~~~~~~~
/Users/riad/ClionProjects/for-jhelper/tasks/../spcppl/make_vector.hpp:4:16: note: candidate function template not viable: requires single argument 'size', but 3 arguments were provided
std::vector<T> make_vector(std::size_t size) {
Wenn ich richtig Problem zu verstehen ist, dass, wenn Compiler versucht Rückgabewert von make_vector berechnen sie das wissen müssen Gibt den Wert des Vektors mit einer geringeren Anzahl von Argumenten zurück und schlägt dies fehl. Wie repariere ich das?
@Columbo, könnten Sie elaborate? – RiaD
Sind Sie ernsthaft ernsthaft in Erwägung, 'vector>'? Wenn Sie mehrdimensionale Arrays benötigen, verwenden Sie eine eindimensionale und wickeln Sie sie ein. –
Columbo
@Columbo was für? – RiaD