相关疑难解决方法(0)

将打包结构成员的引用传递给模板。gcc 错误?

我遇到了一个问题,将结构成员传递给模板函数。该函数的目标是获取成员的地址和大小。这是一个简单的例子:

这是结构。它具有打包属性。

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)

c++ struct reference

6
推荐指数
1
解决办法
3157
查看次数

标签 统计

c++ ×1

reference ×1

struct ×1