Beispiel eines Konzeptes in c++20

avatar

In diesem Code wird ein kleines Anwendungsbeispiel gezeigt, wie man die Konzepte aus c++ verwenden kann. Die Klasse Point2D muss die Voraussetzungen der Konzepte erfüllen, um auf diese Angewendet werden zu können. Würde zum Beispiel die Funkton size() in Point2D fehlen, so gäbe es ein Compilerfehler.

#include <iostream>
#include <concepts>
#include <type_traits>
#include <vector>

// define the type of scalar
template<typename T>
using Skalar = std::decay<decltype(T()[0])>::type;

// restrict the IntVector
template<typename T>
concept IntVector = std::integral<Skalar<T>> && requires(T t) {{ t.size()} -> std::integral;};

template<typename T>
auto product(const T& t) -> Skalar<T> {
    Skalar<T> result = 0;
    for(std::size_t n = 0; n < t.size(); n++){
        result += t[n] * t[n];
    }
    return result;
}

// Custom class to test the matching for above concept with requirement
class Point2D {
public:
    float x;
    float y;

    // custom size function to match the above IntVector concept requirement
    auto size() const -> unsigned int {
        return 2;
    }

    // access x or y
    auto operator[](int n) const -> float {
        return n == 0 ? x : y;
    }
};

int main(){
    // using a vector with has it's own size function
    std::vector<int> a = {1, 2, 3, 4, 5};
    std::cout << product(a) << '\n';

    // using our custom class
    Point2D b = {2, 3};
    std::cout << product(b) << '\n';
}

cpp_concept2.png



0
0
0.000
5 comments
avatar

Ein kleiner Bonus zusätzlich zum Upvote.

!PIZZA !WITZ !BEER

0
0
0.000
avatar

Es gibt Staubsaugervertreter -die verkaufen Staubsauger. Es gibt Versicherungsvertreter
die verkaufen Versicherungen., Und dann gibt es noch Volksvertreter.

Credit: beeber
@ozelot47, ich habe dir im Namen von @dotwin1981 einen $LOLZ Token gesendet
Verwende den Befehl !WITZ oder !LOOL, um einen Witz und ein $LOLZ zu teilen.


PLAY & EARN $DOOM


.(10/10)

0
0
0.000