#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 用来处理模板元编程 关于特异模板的 直译过来就是概念的意思 可以用来处理模板编程关于特定类型 不适配或者特殊处理的方法