繁体   English   中英

如何使用 STL 容器的概念?

[英]How to use a concept for STL containers?

基于这个旧的堆栈溢出问题,您如何为标准库容器定义 C++ 概念?

我看到可以为 STL 容器定义一个概念。 但是,我不确定如何将这个概念实际应用于任何事物,因为它需要 2 个容器,即容器 a 和容器 b。

例如,获取最受赞誉的答案的签名

template <class ContainerType> 
    concept Container = requires(ContainerType a, const ContainerType b) 

我只看到仅与 1 个需求参数一起使用的概念,就像这样

//source: https://en.cppreference.com/w/cpp/language/constraints
template<typename T>
concept Hashable = requires(T a)
{
    { std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
};
 
struct meow {};
 
// Constrained C++20 function template:
template<Hashable T>
void f(T) {}
//
// Alternative ways to apply the same constraint:
// template<typename T>
//     requires Hashable<T>
// void f(T) {}
//
// template<typename T>
// void f(T) requires Hashable<T> {}
 
int main()
{
    using std::operator""s;
 
    f("abc"s);    // OK, std::string satisfies Hashable
    // f(meow{}); // Error: meow does not satisfy Hashable
}

这个概念的定义其实是

 template <class ContainerType> 
 concept Container = /* */;

它只约束一种类型ContainerType ,因此应用此概念的 function 将是

 template <Container C>
 void f(C& c);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM