Më falni për titullin e paqartë, nuk gjeta fjalët e duhura për ta shprehur. Po përpiqem të detyroj një klasë të përcaktojë disa funksione/operatorë që të jenë të sakta. për shembull ForwardIterator
kërkohet që të ketë disa operatorë përndryshe duhet të marr një gabim përpiluesi. E kam bërë pyetjen këtu dhe mua m'u dha një metodë me trashëgimi, funksionon në mënyrë perfekte, por konceptet C++20 duken më intuitive dhe japin gabime më të mira. Ideja fillestare është:
template <typename T> concept is_ForwardIterator= requires(T x, T y)
{
x == y;
};
template <typename T>
requires is_ForwardIterator<T>
struct ForwardIterator {
};
Pastaj, sa herë që dua të zbatoj një përsëritës përpara, trashëgoj nga ForwardIterator
:
struct MyCustomIterator
: public ForwardIterator <MyCustomIterator>
{
bool operator ==(const MyCustomIterator& other) const;
};
Por përpiluesi vazhdon të ankohet se MyCustomIterator
nuk e plotëson kërkesën:
error: constraints not satisfied for class template 'ForwardIterator' [with T = MyCustomIterator]
note: because 'MyCustomIterator' does not satisfy 'is_ForwardIterator'
template <typename T> requires is_ForwardIterator<T> struct ForwardIterator {
^
note: because 'x == y' would be invalid: invalid operands to binary expression ('MyCustomIterator' and 'MyCustomIterator')
x == y;