So verwendest Du den std::vector – Modernes C++

Motivation Auf meiner Lernreise in die Welt der Robotik ist eines meiner Ziele, mein angestaubtes C++-Wissen aufzubessern. Heute schauen wir uns den std::vector an. Der std::vector ist ein praktisches Hilfsmittel, um in C++ Daten zu verwalten. Man kann ihn mit der Liste in Python vergleichen. Im Gegensatz zum std::array ist der std::vector eine dynamische Datenstruktur,…

So verwendest du std::array – Modernes C++

Motivation Auf meiner Lernreise in die Welt der Robotik ist eines meiner Ziele, mein angestaubtes C++-Wissen aufzubessern. Heute schauen wir uns das Konzept von std::array an. Wie war es früher? Vor C++11 musste man C-Style-Arrays benutzen: TEST(ArrayTest, CStyleArray) { int my_int_array[3] = {1, 2, 3}; EXPECT_EQ(my_int_array[0], 1); EXPECT_EQ(my_int_array[1], 2); EXPECT_EQ(my_int_array[2], 3); } Das hat natürlich…

Modernes C++

Im Rahmen meiner Robotik-Experimente bin ich wieder in Kontakt mit der Programmiersprache C++ gekommen. Ich habe aktiv als Entwickler von 2005-2009 Komponenten in C++ implementiert. Hatte dann noch mal einen kurzen Kontakt in der Qualitätssicherung aus der Tester-Perspektive mit der Programmiersprache. Wir haben unter anderen JNA-Wrapper für eine C-Library gebaut. Ich hatte immer eine gewisse…

Lambdas in C++

Motivation Auf meiner Lernreise in die Welt der Robotik ist eines meiner Ziele, mein angestaubtes C++-Wissen aufzubessern. Heute schauen wir uns das Konzept von Lambdas an. Beispiel sort Angenommen, wir wollen einen std::vector sortieren, dann können wir das folgendermaßen machen: std::vector<float> numbers = { -3.5, 1.0, -2.0, -11.0}; std::sort(numbers.begin(), numbers.end()); Der Vector wird hier inplace…

Das auto keyword – Modernes C++

Motivation Wenn man lange mit dynamisch typisierten Sprachen wie Python gearbeitet hat, empfindet man Sprachen, die eine explizite Typangabe zur Compile-Zeit verlangen, komplizierter und langsamer in der Implementierung. Aber halt: in C++ hat sich seit C++11 einiges getan. Wie war es früher? Vor C++11 musste der Datentyp einer Variablen immer explizit angeben werden: int age…

Compiler-Optionen für sauberes C++

Motivation Nachdem ich mich in den letzten Wochen wieder vermehrt mit modernem C++ beschäftigt habe, möchte ich auch sicherstellen, dass mein Code maximal davon profitiert. Ein Aspekt davon ist es, möglichst sauberes C++ durch den Compiler zu erzwingen. Das geht am besten durch Compiler-Optionen. Was sind Compiler-Optionen? Compiler-Optionen oder auch Flags sind unverzichtbare Werkzeuge, um…

How to use the Eigen library in C++

Motivation Working with matrices and vectors in C++ can be a bit cumbersome. The Eigen library is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. It is used in many scientific and engineering applications. Eigen is versatile, efficient, and easy to use. It supports all matrix sizes, from small…

Wie setze ich die C++ Compiler-Version in CMake

Motivation Im Rahmen meines Udacity Nanodegree Robotics Software Engineer musste ich mit C++17 arbeiten, da ROS Noetic Ninjemys Sprachfeature von C++17 verwendet. Nun wollte ich wissen, wie ich die C++-Version in CMake setze. Top Level Cmake-Datei In der Top-Level CMake-Datei setze ich die C++-Version folgendermaßen: set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) Bei einigen Compilern wie dem clang…