Я пытаюсь использовать концепции и шаблон CRTP в своем проекте, но вижу ошибки компиляции при использовании как gcc-12, так и MSVC 2022. Вот упрощенный код:
Я пытаюсь использовать концепции и шаблон CRTP в своем проекте, но вижу ошибки компиляции при использовании как gcc-12, так и MSVC 2022. Вот упрощенный код: [code]namespace Test { namespace concepts { template concept SupportsFn = requires(T t, int k) { { t.fn(k) }; }; }
template class CD { static_assert(concepts::SupportsFn); public: void call(int k) { this->fn(k); } };
template class BD : public CD { static_assert(concepts::SupportsFn); public: void call2(int k) { this->fn(k + 2); } }; }
class ED : public Test::BD { public: void fn(int k) { std::cout C:\temp\memfnexpt\memfnexpt\memfnexpt.cpp(368,2): 1> see declaration of 'Test::BD' 1> C:\temp\memfnexpt\memfnexpt\memfnexpt.cpp(367,11): 1> the concept 'Test::concepts::SupportsFn' evaluated to false 1> C:\temp\memfnexpt\memfnexpt\memfnexpt.cpp(353,5): 1> use of undefined type 'ED' 1> C:\temp\memfnexpt\memfnexpt\memfnexpt.cpp(377,7): 1> see declaration of 'ED' 1> C:\temp\memfnexpt\memfnexpt\memfnexpt.cpp(353,7): [/code] Как использовать концепции CRTP и обойти эту ошибку?
Я пытаюсь использовать концепцию C++20 для реализации интерфейса.
Я использую шаблонный класс «A», который вызывает класс «B».
Фокус в том, что вместо этого использования CRTP (наследование). Я использую владение (композицию).
Он работает БЕЗ...
Краткая версия вопроса
C++23 дает нам новый способ написания классов-примесей (вместо CRTP). Есть ли контекст, в котором CRTP по-прежнему будет предпочтительнее?
Краткое описание двух подходов
CRTP — это мощная идиома в C++, которая использует...
Я пытаюсь лучше понять видимость членов класса C++ применительно к CRTP (любопытно повторяющийся шаблон шаблона). Должен отметить, что я понимаю использование CRTP и его «полиморфизм времени компиляции».
У меня есть следующий фрагмент кода.
// A...