#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 用来处理模板元编程 关于特异模板的 直译过来就是概念的意思 可以用来处理模板编程关于特定类型 不适配或者特殊处理的方法
本文介绍了C++20中新增的concepts特性,如何用于模板元编程,通过SortableContainer概念实现对std::list和std::vector类型的特异性排序函数my_sort,提升代码可读性和适应性。
2779

被折叠的 条评论
为什么被折叠?



