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++ 是静态类型语言。例如:
#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';
}