gpt4 book ai didi

c++ - 将包含 CONST char 数组 [N] 成员的结构的聚合初始化转换为构造函数

转载 作者:行者123 更新时间:2023-11-30 03:25:41 24 4
gpt4 key购买 nike

给定一个包含const char 数组的简单结构,这可以通过聚合初始化轻松初始化:

struct int_and_text {
constexpr static int Size = 8;
const int i;
const char text[Size];
};
const int_and_text some_data[] = { { 0, "abc"}, { 77, "length8" } };

但现在我想添加一个构造函数,但到目前为止,我尝试的任何一个都没有奏效,即使是使用 constexpr memcpy-ish 变体。

template <std::size_t N>
int_and_text(int i_, const char (&text_)[N])
: i{i_},
text{" ? " /* const text[8] from const text[1-8] */ }
{ static_assert(N <= Size); }

这可能吗? const char text_[8] 构造函数参数似乎退化为 char*。从长远来看,制作所有内容 constexpr 也会很好。

最佳答案

#include <cstddef>
#include <utility>

class int_and_text
{
public:
template <std::size_t N>
int_and_text(int i_, const char (&text_)[N])
: int_and_text(i_, text_, std::make_index_sequence<N>{})
{
}

private:
template <std::size_t N, std::size_t... Is>
int_and_text(int i_, const char (&text_)[N], std::index_sequence<Is...>)
: i{i_}
, text{text_[Is]...}
{
static_assert(N <= Size);
}

constexpr static int Size = 8;
const int i;
const char text[Size];
};

const int_and_text some_data[] = { {0, "abc"}, {77, "length8"} };

DEMO

关于c++ - 将包含 CONST char 数组 [N] 成员的结构的聚合初始化转换为构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48852475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com