我知道Boost.pfr可以用来替换类型的字段,并作为T&
访问它们,但由于T&
不能转换为T A::*
,我想知道库中是否有什么东西可以允许访问成员指针的字段。
#include <boost/pfr.hpp>
struct A {
int number;
string text;
};
int main() {
boost::pfr::for_each_field(A{1,"foo"},
[](auto A::* field) { // wish this or something similar were possible
}
);
}
字符串
2条答案
按热度按时间vlurs2pr1#
PFR没有这个(还没有?),但如果你最近有足够的提升,描述可能是你想要的。
请注意,它不像PFR那样具有自动魔力,但它确实给予了在编译时使用的成员指针信息。
在他们的“通用打印示例”中,你可以看到成员描述符对象包含一个成员
pointer
,它是指向成员的类型:字符串
vlju58qv2#
你不能得到指向成员函数的指针。但是你可以在没有对象的情况下遍历字段。结果索引和类型可以以类似于成员指针的方式使用,即稍后提供对象。你可以在编译时使用
boost::pfr::tuple_size<T>::value>{}
获取元组大小,然后编译时使用逗号折叠(已经制作了元组大小的索引序列)来遍历类的字段。这里是一个可能的方法的草图,它比我目前所需要的更一般,但希望能说明这一点。
字符串
输出
型