当前位置:   article > 正文

C++ 20 特性 conecpt_c++20

c++20
  1. #include <concepts>
  2. #include <list>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <type_traits>
  6. template <typename Container>
  7. void my_sort(Container& container) {
  8.     if constexpr (std::is_same_v<Container, std::list<typename Container::value_type>>) {
  9.         container.sort();
  10.     }
  11.     else {
  12.         std::sort(container.begin(), container.end());
  13.     }
  14. }
  15. int main() {
  16.     std::list<int> my_list = { 5, 2, 8, 1, 4 };
  17.     my_sort(my_list);
  18.     for (auto i : my_list)
  19.     {
  20.         printf("%d\n", i);
  21.     }
  22.     std::vector<int> my_vector = { 5, 2, 8, 1, 4 };
  23.     my_sort(my_vector);
  24.     for (auto i : my_list)
  25.     {
  26.         printf("%d\n", i);
  27.     }
  28.     return 0;
  29. }

enable_if_t版本

  1. #include <concepts>
  2. #include <list>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <type_traits>
  6. template <typename Container>
  7. std::enable_if_t<!std::is_same_v<Container, std::list<typename Container::value_type>>>
  8. my_sort(Container& container) {
  9. std::sort(container.begin(), container.end());
  10. }
  11. template <typename Container>
  12. std::enable_if_t<std::is_same_v<Container, std::list<typename Container::value_type>>>
  13. my_sort(Container& container) {
  14. container.sort();
  15. }
  16. int main() {
  17. std::list<int> my_list = { 5, 2, 8, 1, 4 };
  18. my_sort(my_list);
  19. for (auto i : my_list)
  20. {
  21. printf("%d\n", i);
  22. }
  23. std::vector<int> my_vector = { 5, 2, 8, 1, 4 };
  24. my_sort(my_vector);
  25. for (auto i : my_vector)
  26. {
  27. printf("%d\n", i);
  28. }
  29. return 0;
  30. }

c++ 20 concept 版本

  1. #include <concepts>
  2. #include <list>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iostream>
  6. template <typename Container>
  7. concept SortableContainer = std::is_same_v<Container, std::list<typename Container::value_type>>;
  8. template <typename Container>
  9. void my_sort(Container& container) {
  10. std::sort(container.begin(), container.end());
  11. }
  12. template <SortableContainer Container>
  13. void my_sort(Container& container) {
  14. container.sort();
  15. }
  16. int main() {
  17. std::list<int> my_list = { 5, 2, 8, 1, 4 };
  18. my_sort(my_list);
  19. for (auto i : my_list) {
  20. std::cout << i << "\n";
  21. }
  22. std::vector<int> my_vector = { 5, 2, 8, 1, 4 };
  23. my_sort(my_vector);
  24. for (auto i : my_vector) {
  25. std::cout << i << "\n";
  26. }
  27. return 0;
  28. }

上面代码 看得出来 concept 就是C++ 20 用来处理模板元编程 关于特异模板的  直译过来就是概念的意思 可以用来处理模板编程关于特定类型 不适配或者特殊处理的方法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/673027
推荐阅读
相关标签
  

闽ICP备14008679号