c++ - 我可以将 std::any 与 C++17 一起用于指向成员变量的指针吗?

标签 c++ pointers c++17

我正在学习 std::any https://en.cppreference.com/w/cpp/utility/any . 我想知道我是否可以使用它来访问类的数据成员或 functino 成员。 我有一个结构:

struct test
{
    int a;
    double b;
}

然后我想要一个可以测试::a 或测试::b 的通用类型。

 std::any ptr;
 ptr = &test::a;

现在 ptr 是指向类 test 的成员 a 的指针。如果我创建一个类 test 的新对象。我不知道要为这个对象的成员 a 设置一个新值。我尝试了类似以下的方法,但编译器失败了。

 test t;
 std::any ptr;
 ptr = &test::a;

 // set a value for member a of object t using ptr ??
 t.*(std::any_cast<test::*>(ptr)) = 1;

最佳答案

&test::a 的类型是 int test::*,所以您只是缺少 int 部分:

t.*(std::any_cast<int test::*>(ptr)) = 1;

Demo

关于c++ - 我可以将 std::any 与 C++17 一起用于指向成员变量的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54778452/

相关文章:

c++ - 遍历所有字段并在 protobuf 消息中获取它们的值

C 程序崩溃

arrays - 对指针和双指针的特定用户案例的误解

c++ - 与引用 lambda 崩溃异步

c++ - 使用 shared_ptr 时奇怪的双析构函数调用

c++ - 检查c++中是否存在函数时出现问题

c - 声明和访问结构体内部 int 数组的指针

c++ - C++17 模板中的可选运算符重载

c++ - 在 C++17 或更新版本中在哪里初始化静态常量成员?

c++ - decltype( (A{}.int_member) ) 的正确结果是什么?