我遇到了一个问题,将结构成员传递给模板函数。该函数的目标是获取成员的地址和大小。这是一个简单的例子:
这是结构。它具有打包属性。
struct TestStruct {
unsigned char elem1;
unsigned char elem2;
uint64_t elem3;
char buf[10000];
int elem4;
unsigned char elem5;
}
__attribute__ ((packed));
Run Code Online (Sandbox Code Playgroud)
这是模板函数,它应该获取成员的地址
template<typename T>
void addData(const T &val)
{
printf ("address inside func: %p \n",&val);
}
int main(int argc, char *argv[])
{
TestStruct testdata;
testdata.elem4 = 0;
printf ("struct address is: %p \n",&testdata);
printf ("elem4 address is: %p \n",&testdata.elem4);
addData(testdata.elem4);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题:当 属性((packed)); 设置(如在示例中)模板函数收到错误的成员地址:
输出:
struct address is: 0x7fff735bb4e0
elem4 address is: 0x7fff735bdbfa
address inside …Run Code Online (Sandbox Code Playgroud)