Junior — Middle
Чӣ гуна метавон маҳдудиятҳоро дар намудҳо дар параметрҳои намунавӣ дар C++ муқаррар кард?
sobes.tech AI
Ҷавоб аз AI
Дар C++ маҳдудиятҳои навъи дар параметрҳои шаблонҳоро метавон бо чанд роҳ муайян кард:
- SFINAE (Substitution Failure Is Not An Error) — бо ёрии
std::enable_ifва дигар мета-функсияҳо аз<type_traits>, метавон функсияҳо ё синфҳои шаблонро вобаста ба хосиятҳои навъҳо дохил ё хориҷ кард.
#include <type_traits>
template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
// Иҷро барои навъҳои бутун
}
int main() {
foo(10); // OK, int навъи бутун аст
// foo(3.14); // Хатои компилятсия, double мувофиқ нест
}
- Концептҳо (Concepts) — аз C++20, метавон истифода бурд барои маҳдудиятҳои навъҳо, ки бештар хонданӣ ва декларатив мебошанд.
#include <concepts>
template<std::integral T>
void foo(T value) {
// Иҷро барои навъҳои бутун
}
- Тасдиқҳои статикӣ (
static_assert) — дар дохили шаблон, метавон хосиятҳои навъро санҷид ва хато дар компиляция бо паём бароварда шуд.
#include <type_traits>
template<typename T>
void foo(T value) {
static_assert(std::is_integral_v<T>, "T бояд навъи бутун бошад");
// ...
}
Ин гуна маҳдудиятҳо кӯмак мекунанд, ки шаблонҳо бехатартар ва фаҳмидатар гарданд.