有一个宏offsetof(type, member)
,用于计算类或结构成员的偏移量。
我正在尝试将等效功能实现为功能模板:
template<class T,typename U>
static constexpr size_t addressOf(U T::*member) {
return (char*)&((T*)nullptr->*(member)) - (char*)nullptr;
}
但是offsetof
宏还允许我做类似的事情:
struct A {
struct B {
int x;
};
int y;
B b;
};
std::cout << offsetof(A, y) << std::endl; // prints 0
std::cout << offsetof(A, b.x) << std::endl; // prints 4
如何在addressOf
函数中编写相同的内容?
PS:更多信息:我在外部EEPROM芯片上有一系列原始数据,位于定义的地址。所以我想&#34; map&#34;这个数据的结构。而不是&#34;读&#34;从EERPOM到RAM的所有结构,我希望能够访问struct的特定成员和&#34; read&#34;它只是。在这种情况下,我在编译时计算struct成员的地址,并使用如下函数:ReadFromEEPROM(StartAddress+offsetof(A,b.x),&x);
我想找到一种用模板替换宏的方法。