我想设计一个编译时字符串类CTString,例如可以从字符串文字的参数包构造。这可以使用逗号折叠表达式(对于这个玩具示例,我试图避免使用任何系统标头以使其独立):
template<unsigned N>
struct CTString
{
char m_chars[N + 1U];
template<unsigned... Ns>
constexpr CTString(const char (&...s)[Ns])
{
auto* p{ m_chars };
((p = CopyN_(s, Ns - 1U, p)), ...);
*p = '\0';
}
// copy size characters and return one past last copy:
constexpr char* CopyN_(const char* pFrom, unsigned size, char* pTo)
{
for (auto i{ 0U }; i < size; ++i)
*(pTo++) = *(pFrom++);
return pTo;
}
};
template<unsigned... Ns>
constexpr auto concat(const char(&...s)[Ns])
{
return CTString<(0U …Run Code Online (Sandbox Code Playgroud) c++ variadic-templates fold-expression c++20 compile-time-type-checking