Sobes.tech
Junior — Middle

Чӣ гуна метавон маҳдудиятҳоро дар намудҳо дар параметрҳои намунавӣ дар C++ муқаррар кард?

sobes.tech AI

Ҷавоб аз AI

Дар C++ маҳдудиятҳои навъи дар параметрҳои шаблонҳоро метавон бо чанд роҳ муайян кард:

  1. 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 мувофиқ нест
}
  1. Концептҳо (Concepts) — аз C++20, метавон истифода бурд барои маҳдудиятҳои навъҳо, ки бештар хонданӣ ва декларатив мебошанд.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Иҷро барои навъҳои бутун
}
  1. Тасдиқҳои статикӣ (static_assert) — дар дохили шаблон, метавон хосиятҳои навъро санҷид ва хато дар компиляция бо паём бароварда шуд.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T бояд навъи бутун бошад");
    // ...
}

Ин гуна маҳдудиятҳо кӯмак мекунанд, ки шаблонҳо бехатартар ва фаҳмидатар гарданд.