member_pointer member_ptr = get_member_pointer(&T::*(obj + i)); 这句话报错了
时间: 2023-12-06 15:04:54 浏览: 88
报如下错误
非常抱歉,我的回答有误。在我的上一个回答中,我将结构体对象 `obj` 与成员指针相加是错误的。正确的做法是需要使用 `reinterpret_cast` 将结构体对象的地址转换为 `int*` 类型,然后再进行指针加法运算。下面是修改后的示例代码:
```cpp
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
template <typename T, typename U>
struct member_pointer_type {
typedef U T::*type;
};
template <typename T, typename U>
typename member_pointer_type<T, U>::type get_member_pointer(U T::*member) {
return member;
}
template <typename T>
void print_member_values(const T& obj) {
const int num_members = sizeof(T) / sizeof(int);
int* obj_ptr = reinterpret_cast<int*>(&obj);
for (int i = 0; i < num_members; ++i) {
typedef typename member_pointer_type<T, int>::type member_pointer;
member_pointer member_ptr = get_member_pointer(&T::*(obj_ptr + i));
const char* member_name = typeid(member_ptr).name();
cout << member_name << ": " << obj.*member_ptr << endl;
}
}
struct Person {
int age;
string name;
};
int main() {
Person p = { 30, "Tom" };
print_member_values(p);
return 0;
}
```
在这个示例代码中,我们使用 `reinterpret_cast` 将结构体对象 `obj` 的地址转换为 `int*` 类型,并将其存储在 `obj_ptr` 变量中。然后,我们使用指针加法运算来获取结构体的每个成员指针,并使用 `.*` 运算符来访问结构体的成员值。
希望这个修正能够帮助到您。
阅读全文