在编译时连接字符串文字
Concatenate string literals at compile time
我需要将可变数量的字符串文字连接成一个,以便在 static_assert()
中使用它
我尝试将模板与结构一起使用,但编译器不喜欢将文字作为模板参数。
error: the address of ‘m1’ is not a valid template argument because it does not have static storage duration.
error: ‘"thre"’ is not a valid template argument for type ‘const char*’ because string literals can never be used in this context
我也试过完美转发,但是报错:‘args#0’ is not a constant expression
template<size_t size>
constexpr size_t const_strssize(const char (&)[size]) {
return size;
}
template<class... Ts>
constexpr size_t const_strssize(Ts&&... args) {
return const_sum<(const_strssize(std::forward<const Ts>(args)), ...)>::get;
}
澄清一下,我无法执行 "string1" "string2"
,因为我从函数 returns.
中获得了一些字符串
请不要建议像 strlen 或 memcpy 这样的东西。我知道,它们可以在编译时计算。
static_assert()
指定接受字符串文字。您可以编写的任何 constexpr 函数都可以 return 一个常量,但不是文字。所以你只能使用预处理器为 static_assert
构造字符串。对不起。
我需要将可变数量的字符串文字连接成一个,以便在 static_assert()
中使用它我尝试将模板与结构一起使用,但编译器不喜欢将文字作为模板参数。
error: the address of ‘m1’ is not a valid template argument because it does not have static storage duration.
error: ‘"thre"’ is not a valid template argument for type ‘const char*’ because string literals can never be used in this context
我也试过完美转发,但是报错:‘args#0’ is not a constant expression
template<size_t size>
constexpr size_t const_strssize(const char (&)[size]) {
return size;
}
template<class... Ts>
constexpr size_t const_strssize(Ts&&... args) {
return const_sum<(const_strssize(std::forward<const Ts>(args)), ...)>::get;
}
澄清一下,我无法执行 "string1" "string2"
,因为我从函数 returns.
请不要建议像 strlen 或 memcpy 这样的东西。我知道,它们可以在编译时计算。
static_assert()
指定接受字符串文字。您可以编写的任何 constexpr 函数都可以 return 一个常量,但不是文字。所以你只能使用预处理器为 static_assert
构造字符串。对不起。