Advertisement
gluk47

seminar 2023-03-10

Mar 10th, 2023
726
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. // fibonacci
  2.  
  3. #include <iostream>
  4.  
  5. using std::cout;
  6.  
  7. template<int n>
  8. int fib() {
  9.     if constexpr (n <= 1) {
  10.         return n;
  11.     } else {
  12.         return fib<n - 1>() + fib<n - 2>();
  13.     }
  14. }
  15.  
  16. // template<> int fib<0> () { return 0; }
  17. // template<> int fib<1> () { return 1; }
  18.  
  19. int main() {
  20.     cout << fib<10>() << "\n";
  21. }
  22.  
  23. // type traits
  24.  
  25. #include <iostream>
  26. #include <string>
  27.  
  28. template <bool> bool value = false;
  29. template <> bool value<true> = true;
  30.  
  31. template <typename T, bool is_number = std::is_fundamental_v<T>>
  32. struct TTypeTraits {
  33.     using TArgument = T&;
  34. };
  35.  
  36. template <typename T>
  37. struct TTypeTraits<T, true> {
  38.     using TArgument = T;
  39. };
  40.  
  41. template <typename T>
  42. void Print(typename TTypeTraits<const T>::TArgument arg) {
  43.     std::cout << std::to_string(arg) << "\n";
  44. }
  45.  
  46. struct TFlags {
  47.     enum EValue {
  48.         GOOD = 1 << 0,
  49.         BAD  = 1 << 1,
  50.         OK   = 1 << 2,
  51.         UNKNOWN = 1 << 3
  52.     };
  53.  
  54.     template <typename... Args>
  55.     void AddFlags(Args... args) {
  56.         ((value |= args), ...);
  57.     }
  58.     template <typename... Args>
  59.     bool HasFlags(Args... args) {
  60.         EValue flags = (args | ...);
  61.         return value == flags;
  62.     }
  63.     template <typename... Args>
  64.     void ClearFlags(Args... args) {
  65.         ((value &= ~args), ...);
  66.     }
  67.  
  68.     EValue value;
  69. };
  70.  
  71. int main() {
  72.     Print<float>(42.);
  73.  
  74.     TFlags flags;
  75.     flags.AddFlags(TFlags::BAD, TFlags::OK);
  76.     flags.HasFlags(TFlags::GOOD);
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement