tas*_*war 1 c++ string constants
我有一些旧代码#define用来,嗯,定义一些字符串文字,例如
#define FredString "\004FRED"
Run Code Online (Sandbox Code Playgroud)
我想更新以避免使用#define. 我得到的最接近的是以下内容:
static constexpr char* FSraw= "FRED";
static constexpr char FSlen= (char)(sizeof(FSraw) - 1);
static constexpr char* FredString= FSlen FSraw;
Run Code Online (Sandbox Code Playgroud)
但编译器似乎对第三行不满意。
在编译时构造这样一个字符串的最佳方法是什么?显然我仍然可以明确地对长度进行编码,但显然,这更容易出错。
寻找 C++17 或更早版本的解决方案。
template <std::size_t N>
constexpr std::array<char, N+1> AddLenPrefix(const char (&str)[N])
{
std::array<char, N+1> ret{};
ret[0] = N-1; // Exclude the '\0'.
for (std::size_t i = 0; i < N; i++)
ret[i+1] = str[i];
return ret;
}
static constexpr auto FredString = AddLenPrefix("FRED");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |