быть инициализирован каким-либо контейнером. Мне нужно на этапе компиляции проверять, реализует ли контейнер определенные методы (например, operator[]) и, если нет, кидать ошибку. Как я могу это сделать? (концептов нет, C++17)
класс в котором внутри 2 функции дефолтная и чекающая нужную штуку через sfinae
понял-принял-осознал, благодарю
и ещё, скорее всего, тем более чтобы имитировать концепты(несколько проверок за раз), тебе пригодится трюк с decltype
> трюк Это называется sfinae expression
трюк с decltype и запятой это немного другое
Это один из вариантов, можно объединять и через type_list. Суть то в проверке валидности выражения
Самое простое — ты можешь это просто НЕ ДЕЛАТЬ, не проверять. (и иногда это очень правильно даже) Потому что компилятор это сам проверит. А твой код будет немного гибче, потому что вместо жёсткой проверки нужен ли оператор [] будет более мягкая проверка что он нужен именно там, где он нужен, и только если он нужен.
Обсуждают сегодня