【发布时间】:2021-04-13 12:17:00
【问题描述】:
我正在尝试 modernize 我的代码,并借助一些整洁的建议。假设我有这样的课程:
class Config {
public:
static constexpr auto FIELD1 = "FIELD1";
static constexpr auto FIELD2 = "FIELD2";
};
由于字段列表越来越大,我有一个简单的宏:
#define CONFIG_PARAM(param) \
static constexpr auto param = #param;
这可以将我的代码转换为更少样板的版本:
class Config {
public:
CONFIG_PARAM(FIELD1)
CONFIG_PARAM(FIELD2)
};
而且效果很好。除了我收到来自 clang-tidy 的警告说我应该为此考虑一个 constexpr 模板函数。是否有一个我不知道的神秘功能可以从模板中创建像这样的成员变量?
【问题讨论】:
-
你能提供来自
clang-tidy的消息吗? -
恕我直言,没有宏会更干净(尤其是在头文件中)
-
你这样做的方式很好。不要修复没有损坏的东西,也不要让事情变得更复杂。
-
@Quimby
Function-like macro 'CONFIG_PARAM' used; consider a 'constexpr' template function [clang-tidy: cppcoreguidelines-macro-usage] -
看起来 clang-tidy 对这种情况有点乐观——你不能不使用宏来字符串化标识符。