大家好,概念现在是 C++20 标准的一部分,为了使用它,我基本上写了这个我之前看到的示例
#include<iostream>
template<typename T>
concept Container= requires (T a){
{ a.size() } -> size_t;
// others
}
template<Container Holder>
class Demo{};
int main(){
Demo<std::vector<int>> d;
}
Run Code Online (Sandbox Code Playgroud)
但是在编译代码时我收到以下错误
错误:返回类型要求不是类型约束 ( { a.size() } -> size_t;)
后来我记得返回类型约束不能是原始类型,并用 std::same_as 更改了代码
#include<iostream>
template<typename T>
concept Container= requires (T a){
{ a.size() } -> std::same_as<size_t>;
// others
}
template<Container Holder>
class Demo{};
int main(){
Demo<std::vector<int>> d;
}
Run Code Online (Sandbox Code Playgroud)
其中 std::same_as 本身就是一个概念。
但为什么不能使用原始类型呢?我知道它破坏了 C++ 中的某些内容,但我不记得了。