在CLion中创建enum_from_string实时模板并添加至上下文菜单,实现enum_to_string反向功能
在CLion中创建enum_from_string实时模板并添加至上下文菜单,实现enum_to_string反向功能
嘿,我来帮你搞定在CLion里搭建enum_from_string实时模板的事儿,刚好实现你要的enum_to_string反向功能,步骤都给你理得明明白白,跟着走就行~
- 打开CLion设置面板:按快捷键
Ctrl+Alt+S,或者点顶部菜单栏的File→Settings,找到Editor下的Live Templates选项。 - 新建专属模板组:点右侧的
+号,选择Template Group,命名成比如C++ Enum Utils,方便后续管理枚举相关的模板。 - 创建实时模板:在刚建的组里再点
+号选Live Template,然后做这些配置:- 缩写填
enum_from_string,以后输入这个缩写按Tab就能快速生成代码 - 描述写「生成字符串转枚举类型的constexpr函数,实现enum_to_string反向功能」
- 模板正文用这段代码(完全匹配你要的签名):
[[nodiscard]] constexpr $ENUM$ to_$ENUM_SNAKE_CASE$(std::string_view s) { if (s == "$FIRST_ENUMERATOR$") return $ENUM$::$FIRST_ENUMERATOR$; $END$ // 可手动添加其他枚举值的判断分支 // 默认情况处理,可根据需求修改(比如返回默认枚举值或抛出异常) throw std::invalid_argument("Unrecognized string for enum: " + std::string(s)); }
- 缩写填
- 配置模板变量:点
Edit variables按钮,给模板里的变量设置规则:$ENUM$:选择「Enum type」类型,让CLion自动识别当前上下文的枚举类型$ENUM_SNAKE_CASE$:用内置表达式snakeCase(ENUM),自动把枚举名转成小写蛇形命名$FIRST_ENUMERATOR$:选择「Enumerators of enum type」,自动填充枚举的第一个取值
- 设置适用上下文:点模板下方的
Applicable in C++,勾选你需要的场景(比如C函数体、全局代码区等),确保在写C代码时能触发这个模板。 - 添加到右键上下文菜单:
- 回到设置面板,找到
Tools→Menus and Toolbars - 找到你想添加的右键菜单组(比如
Editor Popup Menu),点+号选Add Action - 在弹出窗口里找到
Live Templates→C++ Enum Utils→enum_from_string,添加后保存设置
- 回到设置面板,找到
- (可选)switch版本模板:如果你想和
enum_to_string的switch写法对应,模板正文可以换成这段(适合C++20及以上,支持constexpr字符串比较):[[nodiscard]] constexpr $ENUM$ to_$ENUM_SNAKE_CASE$(std::string_view s) { switch (s) { case "$FIRST_ENUMERATOR$": return $ENUM$::$FIRST_ENUMERATOR$; $END$ default: static_assert(false, "String does not match any enumerator of $ENUM$"); return $ENUM$::$FIRST_ENUMERATOR$; } }
这样生成的函数就能完美实现把字符串反向转换成对应枚举类型的功能,和你现有的enum_to_string模板刚好对应~
备注:内容来源于stack exchange,提问作者Krupip
相关产品推荐
相关产品推荐

