Информация об изменениях

Сообщение Re: Проверка концептов внутри типа от 10.12.2024 11:51

Изменено 10.12.2024 11:57 sergii.p

Re: Проверка концептов внутри типа
Здравствуйте, K13, Вы писали:

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

#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;
}