小编Ivá*_*ala的帖子

将模板参数限制为仅接受具有 C++20 概念的 std::vector 和 std::list

我正在尝试编写一个仅对 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)

c++ templates sfinae c++-concepts c++20

3
推荐指数
1
解决办法
1297
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1

sfinae ×1

templates ×1