如何将内部结构类型作为模板的参数传递?

时间:2015-07-15 21:34:01

标签: c++ templates gcc

有一个宏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); 我想找到一种用模板替换宏的方法。

0 个答案:

没有答案