首页 > 解决方案 > 我可以在 C++17 中使用 std::any 作为指向成员变量的指针吗?

问题描述

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

struct test
{
    int a;
    double b;
}

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

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

现在ptr是指向a类成员的指针test。如果我创建一个新的 class 对象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;

标签: c++pointersc++17

解决方案


的类型&test::aint test::*,所以你只是错过了int部分:

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

演示


推荐阅读