将clang格式与c++20概念结合使用 [英] Using clang-format with c++20 concepts

查看:34
本文介绍了将clang格式与c++20概念结合使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我研究了clang-Format样式选项https://clang.llvm.org/docs/ClangFormatStyleOptions.html,但没有看到任何与c++概念和REQUIRED子句的引用。通常我可以配置clang-Format来做我想做的事情,但我想不出如何让它很好地处理我的概念和要求子句:

  1. 当前clang-Format对我的概念做了这样的处理:
template <typename F, typename P, typename T>
concept Accumulate_Fn = Parser<P>&& std::invocable<F, T, parser_t<P>>&&
    std::same_as<T, std::invoke_result_t<F, T, parser_t<P>>>;

但我想将每个约束放在各自的行上(就像对过长的函数参数所做的那样),这样结果将如下所示:

template <typename F, typename P, typename T>
concept Accumulate_Fn = Parser<P> &&
                        std::invocable<F, T, parser_t<P>> &&
                        std::same_as<T, std::invoke_result_t<F, T, parser_t<P>>>;
  1. 对于带有REQUIRES子句的函数,clang-Format当前提供:
template <Parser P1, Parser P2, typename T, Accumulate_Fn<P1, parser_t<P1>> F>
requires std::same_as<T, parser_t<P1>> constexpr Parser auto
separated_by(P1&& p1, P2&& p2, T&& init, F&& f)

但我想要更接近的东西:

template <Parser P1, Parser P2, typename T, Accumulate_Fn<P1, parser_t<P1>> F>
requires std::same_as<T, parser_t<P1>> 
constexpr Parser auto separated_by(P1&& p1, P2&& p2, T&& init, F&& f)

有什么神奇的选择可以让这一切奏效吗?我当前使用的是clang-Format 10.0。

推荐答案

从7月20日起,clang-format不能正确支持概念。LLVM跟踪器中有open issue

这篇关于将clang格式与c++20概念结合使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆