将 clang-format 与 c++20 概念一起使用
Posted
技术标签:
【中文标题】将 clang-format 与 c++20 概念一起使用【英文标题】:Using clang-format with c++20 concepts 【发布时间】:2020-09-24 21:20:35 【问题描述】:我查看了 clang-format 样式选项https://clang.llvm.org/docs/ClangFormatStyleOptions.html,但没有看到对 c++ 概念和要求子句的任何引用。通常我可以配置 clang-format 来做我想做的事,但我不知道如何让它很好地处理我的概念和需要子句:
-
目前 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>>>;
-
对于带有 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。
【问题讨论】:
clang-format 仅允许包含现有编码标准中使用的规则。由于现在每个人都使用 clang 格式,因此存在先有鸡还是先有蛋的问题。出于同样的原因,例如无法以受控方式格式化 if-with-initializer(我在这里问过这个问题***.com/questions/67697966/…)。 【参考方案1】:截至 20 年 7 月,clang-format
不正确支持概念。 LLVM 跟踪器中有一个open issue。
【讨论】:
感谢您链接到该问题。我会一直关注的。 我想知道什么时候会支持概念。以上是关于将 clang-format 与 c++20 概念一起使用的主要内容,如果未能解决你的问题,请参考以下文章
QtCreator:将 QtCreatorCodeStyle 与 clang-format 统一起来