gpt4 book ai didi

c++ - 有没有一种方法可以存储多种类型的结构成员指针

转载 作者:行者123 更新时间:2023-12-03 07:15:22 25 4
gpt4 key购买 nike

我有这段代码可以很好地按索引检索foo成员。

#include <string>
#include <iostream>

struct Foo {
int a = 42;
int b = 16;
std::string str = "hi";
};

int main()
{
int Foo::*members[] = { &Foo::a, &Foo::b };
Foo foo;

std::cout << foo.*members[1] << std::endl;
return 0;
}
问题是我在结构上有一个 std::string,希望能够以相同的方式访问它,是否有可扩展到任何类型的解决方案?
我尝试过的
#include <string>
#include <iostream>
#include <any>

struct Foo {
int a = 42;
int b = 16;
std::string str = "coucou";
};

int main()
{
std::any Foo::*members[] = { (std::any Foo::*)&Foo::a, (std::any Foo::*)&Foo::b, (std::any Foo::*)&Foo::str };
Foo foo;

std::cout << std::any_cast<int>(foo.*members[0]) << std::endl;
return 0;
}
我告诉自己,如果存储一个 std::any数组,那将起作用。实际上,此代码确实可以编译但会崩溃。
有什么办法吗?

最佳答案

您可以使用std::tuple:

std::tuple members{&Foo::a, &Foo::b, &Foo::str }; // C++17 CTAD
// else, use `std::make_tuple`
Foo foo;

std::cout << foo.*std::get<0>(members) << " " << foo.*std::get<2>(members) << std::endl;
Demo

关于c++ - 有没有一种方法可以存储多种类型的结构成员指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64731573/

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