代码之家  ›  专栏  ›  技术社区  ›  Igor R.

概念作为类型约束中的模板参数

  •  0
  • Igor R.  · 技术社区  · 4 年前

    以下代码片段中的正确语法是什么:

    template <class T>
    concept engine = requires(T&& t) {
      { t.start() } -> std::convertible_to<bool>;
    };
    
    template <class T>
    concept car = requires(T&& t) {
     { t.get_engine() } -> std::convertible_to<std::optional<engine>>; // this would not compile!
    };
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   康桓瑋    4 年前

    使用模板lambda怎么样?

    #include <optional>
    #include <concepts>
    
    template <class T>
    concept engine = requires(T&& t) {
      { t.start() } -> std::convertible_to<bool>;
    };
    
    template <class T>
    concept car = requires(T&& t) {
      []<engine E>(const std::optional<E>&) { } (t.get_engine());
    };
    

    Demo