如何从较小的std::array<char,512>
构造一个constexpr const char*
?
#include <array>
strcut A{
template<std::size_t N>
constexpr A(const char (&p)[N]) : a(p) {}
std::array<char, 512> a;
}
int main()
{
constexpr const char* s = "asdasd";
constexpr A a(s);
}
以上内容无法编译。有可能吗? std::memcpy
不起作用,因为它不是constexpr。
for循环会起作用,这很愚蠢...?
答案 0 :(得分:3)
您无法从constexpr const char*
开始操作,因为它会丢失尺寸信息。但是您可以从文字中使用的constexpr char[]
中进行操作,这很容易:
#include <array>
#include <utility>
template<size_t N, size_t I, size_t... Ix>
constexpr auto make_array(const char (&arr)[N], std::index_sequence<Ix...>) {
return std::array<char, I>{arr[Ix]...};
}
struct A{
template<std::size_t N>
constexpr A(const char (&p)[N]) :
a(make_array<N, 512>(p, std::make_index_sequence<N>{})) {}
std::array<char, 512> a;
};
int main()
{
constexpr decltype(auto) s = "asdasd";
constexpr A a(s);
}