我可以使用带有C ++ 17的std :: any指向成员变量的指针吗?

时间:2019-02-20 03:39:09

标签: 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是指向类a的成员test的指针。并且如果我创建类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;

1 个答案:

答案 0 :(得分:3)

&test::a的类型为int test::*,因此您只缺少int部分:

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

Demo