【发布时间】:2021-12-20 07:20:53
【问题描述】:
有没有办法强制概念中的类型要求与特定类型匹配? F.e.分配器中的 size_type 是 size_t 还是可以转换为 size_t ?
【问题讨论】:
-
有点不清楚你在问什么。你能描述一下你将如何使用它吗?
标签: c++ c++20 c++-concepts
有没有办法强制概念中的类型要求与特定类型匹配? F.e.分配器中的 size_type 是 size_t 还是可以转换为 size_t ?
【问题讨论】:
标签: c++ c++20 c++-concepts
是的,您可以使用covertible_to<T> 来做到这一点,请看下面的示例。使用convertible_to,您可以检查一个类型是否可以转换为另一种类型。
#include <concepts>
#include <string>
template<typename T>
concept Convertable = requires(T a) {
{ a } -> std::convertible_to<std::size_t>;
};
template<Convertable T>
class Test{
};
int main(){
Test<int> a;
Test<std::string> b; //Compilation will fail.
}
【讨论】:
template<std::convertible_to<std::size_t> T> class Test; - 使用标准词汇,不要用冗长的层级来掩盖它。