Bawiłem się pomysłami. Oto przykład, w którym minimalna Próbuję stworzyć koncepcję na podstawie podpisów metoda:Pojęcia: sprawdzanie podpisów metod z argumentami
template<typename T>
concept bool myConcept() {
return requires(T a, int i) {
{ a.foo() } -> int;
{ a.bar(i) } -> int;
};
}
struct Object {
int foo() {return 0;}
int bar(int) {return 0;}
};
static_assert(myConcept<Object>(), "Object does not adhere to myConcept");
do mojego zaskoczenia piśmie { a.bar(int) } -> int
nie działa, więc uciekają się do dodawania dodatkowy argument do wypowiedzi requires
. Wydaje się to trochę dziwne i zastanawiałem się, czy istnieje sposób, aby zrobić to samo. Inną rzeczą, która zadziałała, było użycie czegoś w stylu { a.bar((int)0) } -> int
, ale uważam, że jest gorsza.
Podoba mi się, że jesteś makevalem() i chciałbym zobaczyć go w standardzie. –
YSC