我有许多字符串,想找到它们的最大长度并将其分配给一个 constexpr 变量。我遇到了这种方法:
template <uint32_t N>
constexpr uint32_t get_string_length (const char (&str) [N])
{
return N;
}
template <uint32_t... N>
constexpr uint32_t max_string_length_all (const char (&... strs) [N])
{
constexpr uint32_t lengths [] = {get_string_length (strs)...};
uint32_t max_len = 0;
for (uint32_t len : lengths)
{
if (len > max_len)
{
max_len = len;
}
}
return max_len;
}
这应该这样称呼:
inline char const my_string_0 [] = "my string 0"; // several of these with different string lengths
constexpr uint32_t max = max_string_length_all (my_string_0, my_string_1, my_string_3);
但我明白了
error: 'strs#0' is not a constant expression
在
max_string_length_all
的第一行(也适用于strs#1和strs#2)
我使用 GCC 设置为 C++ 17。我不熟悉可变参数函数和折叠表达式,所以我不知道如何修复它。
万一它可以解决下一步将是:
typedef struct
{
char const * my_string;
// other struct members
} T_my_struct;
T_my_struct my_array []
= {
{my_string_0, /*other data*/},
{my_string_1, /*other data*/},
// more
};
现在将
my_array
传递给类似 max_string_length_all
的东西,并在编译时再次获得最大字符串长度。
这可能吗?