#include <iostream>
struct Point
{
int x;
int y;
};
struct MyStruct
{
int a;
int b;
Point point;
};
template<typename T>
struct GetMemberClass{};
template<typename C, typename M>
struct GetMemberClass<M C::*>
{
using ClassType = C;
using MemberType = M;
};
template<typename MemberType>
bool is_member_object_pointer(MemberType entity)
{
return std::is_member_object_pointer<MemberType>::value;
}
int main()
{
MyStruct obj;
MyStruct* ptr = &obj;
obj.a = 5;
obj.b = 7;
obj.point.x = 11;
obj.point.y = 12;
obj.point = { 21, 22 };
std::cout << obj.point.x << "," << obj.point.y << std::endl;
auto TypePointX = &Point::x;
std::cout << "std::is_member_object_pointer<"
<< typeid(TypePointX).name() << "> = "
<< std::is_member_object_pointer<decltype(TypePointX)>::value << std::endl;
std::cout << "std::is_member_object_pointer<"
<< typeid(TypePointX).name() << "> = "
<< is_member_object_pointer(&Point::x) << std::endl;
auto point = &MyStruct::point;
((obj.*point).*TypePointX) = 21;
auto TypeA = &MyStruct::a;
(obj.*TypeA) = 500;
int MyStruct::*TypeAA = &MyStruct::a;
std::cout << typeid(TypeA).name() << std::endl;
std::cout << obj.*TypeA << std::endl;
std::cout << obj.*TypeAA << std::endl;
std::cout << ptr->*TypeA << std::endl;
std::cout << "Hello World!\n";
return 0;
}
如何保存类的成员变量到其他类中
于 2023-08-05 11:13:24 首次发布