如何在容器中保存指向不同类型数据成员的指针?

问题描述 投票:0回答:1

cppreference 指针页面 给出了一些如何使用指向数据成员的指针的示例。但如果我想将它们存放在一个容器中怎么办?例如:

class C {
   int i;
   double d;
};

std::vector<???> v{&C::i, &C::d};

我知道我可以使用

std::any
来实现,但也许有类似
void *
的东西来表示简单的指针?

还有一个相关的问题。

std::any
,据我了解,保存 typeid 来检查强制转换是否错误。在使用指向数据成员的指针时,我可以使用它来获得正确的转换,例如:

C c;
c.*(std::cast<??? &C::*>(v[0])) = 42;

我会很感激一些阅读有关数据成员指针的链接,我能找到的太少了!

c++
1个回答
0
投票

如何在容器中保存指向不同类型数据成员的指针?

你必须枚举所有可能的类型。 C++ 是静态类型语言。例如:

#include <vector>
#include <variant>
struct C {
   int i;
   double d;
};
std::vector<std::variant<int C::*, double C::*>> v{&C::i, &C::d};

我可以用它来获得正确的演员阵容,比如:

是的,您可以“像”那样使用它。

#include <vector>
#include <any>
#include <iostream>
struct C {
   int i;
   double d;
};
std::vector<std::any> v{&C::i, &C::d};
int main() {
    C c;
    c.i = 1;
    std::cout << c.*std::any_cast<int C::*>(v[0]) << '\n';
}
© www.soinside.com 2019 - 2024. All rights reserved.