简体   繁体   English

我可以使用std :: any和C ++ 17指向成员变量吗?

[英]Could I use std::any with C++17 for pointer to member variable?

I'm studying with std::any https://en.cppreference.com/w/cpp/utility/any . 我正在学习std :: any https://en.cppreference.com/w/cpp/utility/any I'm wondering if I can use it for accessing data members or functino member of class. 我想知道我是否可以使用它来访问数据成员或类的functino成员。 I have a struct: 我有一个结构:

struct test
{
    int a;
    double b;
}

Then I want a general type that can either test::a or test::b. 然后我想要一个可以测试:: a或test :: b的通用类型。

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

Now ptr is a pointer to a member a of class test . 现在ptr是一个指向构件a类的test And if I create a new object of class test . 如果我创建一个新的类test对象。 I don't know to set a new value of member a of this object. 我不知道设置此对象的成员a的新值。 I tried something like following but it is fail at compiler. 我尝试了类似下面的内容,但它在编译器中失败了。

 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;

The type of &test::a is int test::* , so you're just missing the int portion: &test::a的类型是int test::* ,所以你只是缺少int部分:

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

Demo 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM