支持 C++20 Concepts
Concepts 是 C++20 标准中的主要语言特性之一。 它们提供了一种对模板参数施加编译时约束的方法,帮助您确保模板符合您的预期。
配置 Concepts 支持
1. 设置编译器
您使用的编译器应支持 C++20 Concepts 特性。
使用 Clang10 或更高版本。 您可以在 C++ Support in Clang 中检查特定 C++20 特性的状态。
MSVC 自 Visual Studio 16.3 版本起支持 Concepts。 请注意,简洁语法(
void fn(MyConcept auto mc))尚不支持。可能需要添加
#define __cpp_lib_concepts以正确解析(请参阅 Microsoft announcement 的评论)。
2. 将项目标准设置为 C++20
CMake 项目
当 创建新项目时,在新建项目向导的 语言标准 字段中选择 C++20。
对于现有项目,在 CMakeLists.txt 的开头设置
CMAKE_CXX_STANDARD变量:set(CMAKE_CXX_STANDARD 20)
Makefile 项目
在 Makefile 中设置 CXXFLAGS 变量:
Meson 项目
设置 cpp_std 编译器选项:
3. 确保启用了 Clangd 补全
默认情况下,CLion 的代码补全由 基于 Clangd 的引擎 执行。 在使用 Concepts 时,使用默认选项 仅 Clangd 补全 或切换到 Clangd 补全与内置功能合并。
转到 。
在 代码补全 部分中,设置 通过 clangd 使用代码补全 复选框:

Concepts 的代码洞察
解析和高亮
CLion 解析并高亮显示所有标准语法形式的 concept 和 requires:

您可以在 中调整 Concepts 的高亮设置。 默认情况下,方案继承自 C/C++ 类/结构体/枚举/联合体。

代码分析
一组带有快速修复的 检查 可用于使用 Concepts 的代码。
在这些检查中,一些检查来自编译器:

CLion 为 Concepts 提供了两个专用检查, 未使用的概念 和 无约束的变量类型。 您可以在 中配置它们:

Concepts 也包含在所有相关的 未使用代码 检查中,例如 未使用的 include 指令。
未约束的变量类型 检查建议对声明为 auto 的局部变量进行约束,如果将受约束表达式或函数调用的结果赋值给它们。 此检查在 Windows 上默认禁用。

代码补全、导航和重构
Concepts 的代码补全在以下情况下可用:
对受约束的模板类型参数的补全:

对由
std::is_base_of<MyBase, T>和std::is_same<Other, T>约束的类型的补全。T在std::is_base_of<MyBase, T>和std::is_same<Other, T>中的建议列表分别包括来自MyBase和Other的选项:
请注意,此情况下的补全仅在
MyBase和Other是具体类型(而非模板类型)时有效。