Modernes C++ programmieren

Okt 23, 2024

lst-0659-book.cpp

// https://godbolt.org/z/7KzcWE8Pz 
#include <string>
#include <vector>
#include <set>
#include <tuple>
#include <memory> // shared_ptr
template <typename T>
class MyStuff {
    T data_;
public:
    MyStuff() : data_{} {}             // default c'tor
    MyStuff(const T& d) : data_{d} { } // copy c'tor
    T getStuff() const { return data_; }
};
class IntValue {
    int val_;
public:
    explicit IntValue(int val=0) : val_(val) {}
    int getInt() const { return val_; }
};
int main() {
    MyStuff intStuff(12);              // wird zu MyStuff<int>
    std::vector vs{ 1,2,3,4 };         // wird zu vector<int>
    MyStuff ivalStuff{ IntValue{33} }; // wird zu MyStuff<IntValue>
    std::tuple tpl{ 23, 'a' };         // wird zu tuple<int,char>
    std::set zweiDrei (vs.begin()+1, vs.end()-1); // wird zu set<int>
    // Kann der Compiler nicht deduzieren:
    MyStuff<double> dblStuff;              // kein Konstruktorargument
    std::vector<char> vcs(10);             // Größe 10, aber von welchem Typ?
    std::shared_ptr<int> ptr{new int{88}}; // keine Regel für int*
}