动态成员指针数组



是否可以创建一个动态数组来保存结构中每个变量的名称?

typedef struct dataSave {
uint8_t nb;
bool state;
uint16_t dataIRArray[512];
} dataSave_t;
dataSave_t mysave;
template <typename T>
struct config_t {
auto T::*var;
char* name;
};
const config_t<dataSave_t> config[] = {
{&dataSave_t::nb, "nb"},
{&dataSave_t::state, "state"},
{&dataSave_t::dataIRArray, "dataIRArray"}
};

结构变量的类型是不同的,总是产生一个错误:

错误:用占位符'auto'声明非静态数据成员

我需要创建一些类似于动态地通过JSON和转换JSON数据只是通过将其添加到配置列表。

我猜你想要这样的东西:

template <typename owner>
struct desc_base
{
virtual ~desc_base() = default;
virtual std::string to_string(const owner&) = 0;
virtual void from_string(owner&, std::string_view) = 0;
const std::string name;
desc_base(std::string_view name) : name(name) {}
};

template <typename owner, typename member>
struct desc : desc_base<owner>
{
member owner::*ptr;
std::string to_string(const owner& o) override { return my_to_string(o.*ptr); }
void from_string(owner& o, std::string_view s) override { my_from_string(s, o.*ptr); }
desc (member owner::*ptr, std::string_view name) : desc_base<owner>(name), ptr(ptr) {}
};

template <typename owner, typename member>
std::unique_ptr<desc<owner, member>>
make_desc(member owner::*ptr, std::string_view name) { return std::make_unique<desc<owner, member>>(ptr, name); }

const std::unique_ptr<desc_base<dataSave_t>> config[] {
make_desc(&dataSave_t::nb, "nb"),
make_desc(&dataSave_t::state, "state"),
make_desc(&dataSave_t::dataIRArray, "dataIRAArray")
};

使用基本的多态性技术来存储基类对象的数组(指向基类对象的智能指针),其中所有实际工作都是由派生对象通过虚函数完成的。这里的功是from_stringto_string。您可以将它们替换为完成您需要做的任何实际工作的函数,或者仅定义my_to_stringmy_from_string

相关内容

  • 没有找到相关文章

最新更新