Могу ли я использовать std :: any с C ++ 17 для указателя на переменную-член? - PullRequest
0 голосов
/ 20 февраля 2019

Я изучаю с std :: any https://en.cppreference.com/w/cpp/utility/any. Мне интересно, смогу ли я использовать его для доступа к членам данных или членам класса functino.У меня есть структура:

struct test
{
    int a;
    double b;
}

Затем я хочу общий тип, который может либо test :: a или test :: 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 голосов
/ 20 февраля 2019

Тип &test::a равен int test::*, поэтому вам просто не хватает части int:

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

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...