Ich rate Ihre Frage ist eigentlich darüber, wie Sie Ihre Klasse Konstruktor diese Art von Initialisierungsliste akzeptieren. Die Kommentatoren scheinen jedoch zu denken, dass Sie fragen, wie Sie eine Matrix-Klasse implementieren.
Nur für den Fall, dass ich recht habe, hier ist ein Beispiel für die Konstruktion aus einer Initialisierungsliste.
Aber wenn ich falsch liege, bedenken Sie, dass die Implementierung eines Arrays in diesem Beispiel schlecht ist und Sie es nicht verwenden möchten. Ich habe mich für ein C-Style-Array entschieden, weil es einfach einzurichten ist und die Leute mit ihrer Arbeitsweise vertraut sind.
Auch diese Initialisierung wird außerhalb der Grenzen des Arrays schreiben, wenn die Liste zu viele Elemente enthält, also denken Sie daran für Ihre Klasse.
Und ich nehme auch an, dass es Ihnen egal ist, Ihren Konstruktor constexpr zu behalten.
Also hier ist es, ein Beispiel für einen Konstruktor einer 2-verschachtelte Initialisiererliste zu akzeptieren, nur dass ...:
#include <initializer_list>
#include <iostream>
template <typename T, int row_count, int col_count>
class matrix {
T carray[row_count][col_count];
public:
matrix(std::initializer_list< std::initializer_list<T> > init_list) {
int rowidx=0;
for(const auto& row : init_list) {
int colidx=0;
for(const auto& elem : row) {
carray[rowidx][colidx++] = elem;
}
++rowidx;
}
}
void Print() const {
for(const auto& row : carray) {
for(const T& elem : row) {
std::cout << elem << " ";
}
std::cout << '\n';
}
}
};
int main() {
matrix<int, 2, 2> tonpai = { { 1,2 }, { 3,4 } };
tonpai.Print();
}
Ist dies eine akademische Übung zu verstehen, wie dies zu tun, oder weil Sie brauchen ein Werkzeug, das es tut? – tadman
Wie wäre es mit einem ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) von [' std: array'] (http://en.cppreference.com/ w/cpp/container/array)? –
Ja, ich versuche diese Übung zu machen, aber ich weiß nicht, welches Argument des Konstruktors sein sollte. – BeginTP