【问题标题】:How to match a certain type for a type-requirement如何为类型要求匹配某种类型
【发布时间】:2021-12-20 07:20:53
【问题描述】:

有没有办法强制概念中的类型要求与特定类型匹配? F.e.分配器中的 size_type 是 size_t 还是可以转换为 size_t ?

【问题讨论】:

  • 有点不清楚你在问什么。你能描述一下你将如何使用它吗?

标签: c++ c++20 c++-concepts


【解决方案1】:

是的,您可以使用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&lt;std::convertible_to&lt;std::size_t&gt; T&gt; class Test; - 使用标准词汇,不要用冗长的层级来掩盖它。
猜你喜欢
  • 2023-03-26
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2011-12-13
  • 2013-07-06
  • 1970-01-01
  • 2015-12-21
相关资源
最近更新 更多