赞
踩
- #include <concepts>
- #include <list>
- #include <vector>
- #include <algorithm>
- #include <type_traits>
-
-
- template <typename Container>
- void my_sort(Container& container) {
- if constexpr (std::is_same_v<Container, std::list<typename Container::value_type>>) {
- container.sort();
- }
- else {
- std::sort(container.begin(), container.end());
- }
- }
-
-
- int main() {
- std::list<int> my_list = { 5, 2, 8, 1, 4 };
- my_sort(my_list);
- for (auto i : my_list)
- {
- printf("%d\n", i);
- }
- std::vector<int> my_vector = { 5, 2, 8, 1, 4 };
- my_sort(my_vector);
- for (auto i : my_list)
- {
- printf("%d\n", i);
- }
- return 0;
- }
enable_if_t版本
- #include <concepts>
- #include <list>
- #include <vector>
- #include <algorithm>
- #include <type_traits>
-
-
- template <typename Container>
- std::enable_if_t<!std::is_same_v<Container, std::list<typename Container::value_type>>>
- my_sort(Container& container) {
- std::sort(container.begin(), container.end());
- }
-
- template <typename Container>
- std::enable_if_t<std::is_same_v<Container, std::list<typename Container::value_type>>>
- my_sort(Container& container) {
- container.sort();
- }
-
- int main() {
- std::list<int> my_list = { 5, 2, 8, 1, 4 };
- my_sort(my_list);
- for (auto i : my_list)
- {
- printf("%d\n", i);
- }
- std::vector<int> my_vector = { 5, 2, 8, 1, 4 };
- my_sort(my_vector);
- for (auto i : my_vector)
- {
- printf("%d\n", i);
- }
- return 0;
- }
c++ 20 concept 版本
-
- #include <concepts>
- #include <list>
- #include <vector>
- #include <algorithm>
- #include <iostream>
-
- template <typename Container>
- concept SortableContainer = std::is_same_v<Container, std::list<typename Container::value_type>>;
-
-
-
- template <typename Container>
- void my_sort(Container& container) {
- std::sort(container.begin(), container.end());
- }
-
- template <SortableContainer Container>
- void my_sort(Container& container) {
- container.sort();
- }
-
-
- int main() {
- std::list<int> my_list = { 5, 2, 8, 1, 4 };
- my_sort(my_list);
- for (auto i : my_list) {
- std::cout << i << "\n";
- }
-
- std::vector<int> my_vector = { 5, 2, 8, 1, 4 };
- my_sort(my_vector);
- for (auto i : my_vector) {
- std::cout << i << "\n";
- }
-
- return 0;
- }
上面代码 看得出来 concept 就是C++ 20 用来处理模板元编程 关于特异模板的 直译过来就是概念的意思 可以用来处理模板编程关于特定类型 不适配或者特殊处理的方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。