Сообщение Re: Проверка концептов внутри типа от 10.12.2024 11:51
Изменено 10.12.2024 11:57 sergii.p
Re: Проверка концептов внутри типа
Здравствуйте, K13, Вы писали:
K13>Вопрос -- это как-то лечится?
можно через CRTP
K13>Вопрос -- это как-то лечится?
можно через CRTP
#include <concepts>
template<typename T>
struct Clonable {
T clone() { return new T(static_cast<T*>(*this)); } // up-cast here
};
template<typename T>
concept cloneable = requires (T x) {
static_cast<Clonable<T>>(x);
};
template< cloneable T >
struct OnlyCloneable {};
struct Foo: Clonable<Foo>
{
Foo clone() const { return Foo(*this); }
using Ptr1 = OnlyCloneable<Foo>;
};
struct Bar {};
static_assert( cloneable<Foo> );
//static_assert( cloneable<Bar> );
int main()
{
return 0;
}
Re: Проверка концептов внутри типа
Здравствуйте, K13, Вы писали:
K13>Вопрос -- это как-то лечится?
можно через CRTP
K13>Вопрос -- это как-то лечится?
можно через CRTP
#include <concepts>
template<typename T>
struct Clonable {
T clone() { return new T(static_cast<T*>(*this)); } // up-cast here
};
template<typename T>
concept cloneable = requires (T x) {
static_cast<Clonable<T>>(x);
};
template< cloneable T >
struct OnlyCloneable {};
struct Foo: Clonable<Foo>
{
using Ptr1 = OnlyCloneable<Foo>;
};
struct Bar {};
static_assert( cloneable<Foo> );
//static_assert( cloneable<Bar> );
int main()
{
return 0;
}