繁体   English   中英

C++ 概念中的类型要求 (C++20)

[英]Type requirement in C++ concepts (C++20)

我正在使用 g++ 10 学习新实现的 C++20 标准概念。我坚持一个简单的类型要求。 即我想实现模板参数T具有T::inner成员名称的要求。 这是我的错误代码。 这个简单的代码有什么问题以及如何修复它?

#include<concepts>

template<typename T>
concept ContainsInner = requires
{
  typename T::inner;
};

template<ContainsInner T>
struct S{};

struct Q
{
  int inner;
};

int main()
{
  S<Q> s;     // instantiate S with Q for template type, 
              // which must satisfy the ContainsInner concept.
              // Q indeed contains the inner name but still the compilation fails
}

这个:

template<typename T>
concept ContainsInner = requires
{
  typename T::inner;
};

要求T有一个名为inner类型 gcc 在其错误中告诉您:

source>:6:12: note: the required type 'typename T::inner' is invalid
    6 |   typename T::inner;
      |   ~~~~~~~~~^~~~~~~~~

Q没有名为inner类型 如果你想要的是有一个名为inner的成员变量,那么你想要:

template<typename T>
concept ContainsInner = requires(T t) {
    t.inner;
};

请注意,这甚至不检查它是什么类型,只是检查它是否存在。 这不是很有用。 也许你想要求它是一个int

template<typename T>
concept ContainsInner = requires(T t) {
    { t.inner } -> std::same_as<int&>;
};

暂无
暂无

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

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