170 похожих чатов

Подскажите, как в шаблоне указать каким именно классом должен быть

тип? Например, у меня есть класс A с методом func(), я хочу создать шаблонную функцию, которая будет принимать объекты этого класса либо наследуемые от него, так что я смогу вызывать функцию func()

15 ответов

6 просмотров

может как то так: #include <type_traits> struct A {}; struct B : A {}; struct C {}; template<class T> void fn() { static_assert(std::is_base_of<A,T>::value, "not A subtype"); } int main() { fn<A>(); fn<B>(); fn<C>(): // assertion failed }

adel- Автор вопроса

Это не надо контролировать, вся прелесть шаблонов в том, что они работают со всем, что под шаблон подходит. Если оно может кракать, то нам все равно, что это не утка.

Если C++ 20, то это можно сделать концертами.

А func() должна вызываться у наследника или у базы?

adel- Автор вопроса
Ilya Zviagin
Это не надо контролировать, вся прелесть шаблонов ...

А если я передам int? Получается, что никаких проверок от самого языка не существует?

adel
func() наследника

Для этого лучше подходят виртуальные функции Но в ином случае: void foo(std::derived_from<A> auto&& a) { std::forward<decltype(a)>(a).func(); } Аналогичный код на C++17 и ниже переписывается довольно просто и прямолинейно с помощью enable_if

adel
А если я передам int? Получается, что никаких пров...

Существует если тот класс не подойдет, оно не скомпилируется

Ilya Zviagin
Существует если тот класс не подойдет, оно не ско...

Как ты лёгким движением руки проигнорировал SFINAE

Yurij horssyyy
А при чем тут оно?

При том, что "если класс не подойдёт, то не скомпилируется" — это немного не так, как работает C++

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Кто-нибудь знает, как считается нагрузка на цпу? И что такое вообще "нагрузка на цпу"? вот, например, есть у цпу какой-то clock, настроенный на 3 ГГц --- Что значит "нагрузка...
Toideng
15
Можно ли написать свою библиотеку "socket" на каком либо языке ассемблера с нуля не используя сишние библиотеки ? Или это самоубийство ?
123🪐
15
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
{!! $modx->runSnippet( 'multiTV',[ 'tvName'=>'slider-main1', 'docid'=>'[*id*]', 'tplConfig'=>'', 'display'=>'4', 'offset'=>'0', 'rows'=>'all', 'ra...
Роман С
4
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Карта сайта