大家好,概念现在是 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++ 中的某些内容,但我不记得了。
cpp*_*ner 10
因为语义不明确:是否{ a.size() } -> size_t意味着 的结果a.size()可以转换为 size_t,或者decltype(a.size())与完全相同 size_t?
因此,必须使用约束来明确意图(convertible_to对于前者,same_as对于后者)。
| 归档时间: |
|
| 查看次数: |
2361 次 |
| 最近记录: |