我正在尝试编写一个仅对 std::vector 或 std::list 中的数字进行排序的程序,我为此做了两个概念:
template<typename T>
concept ValidContainer = requires(T a) {
std::same_as<T, std::vector<typename T::value_type>>;
std::same_as<T, std::list<typename T::value_type>>;
};
Run Code Online (Sandbox Code Playgroud)
和:
template<typename T>
concept Sortable = requires(T a) {
ValidContainer<T> && std::same_as<typename T::value_type, int>;
ValidContainer<T> && std::same_as<typename T::value_type, float>;
};
Run Code Online (Sandbox Code Playgroud)
以及对它们进行排序的函数的签名:
void BubbleSort(Sortable auto& collection)
{
// sort algorithm
}
Run Code Online (Sandbox Code Playgroud)
我脑海中出现的问题是,当我传递 a 时,std::vector<std::string>
它没有显示编译错误?
int main()
{
std::vector<int> test = { 32, 3, 6, 8, 2, 5, 0, 43, 67, 1 };
std::vector<std::string> test2 = { "first", "second", "third" …
Run Code Online (Sandbox Code Playgroud)