java offset怎么用,使用offsetof作为模板类

从C标准:

标准布局类是一个类: - 没有类型非标准布局类(或此类类型的数组)或引用的非静态数据成员, - 没有虚函数(10.3)且没有虚基类(10.1), - 对所有非静态数据成员具有相同的访问控制(第11条), - 没有非标准布局基类, - 在最派生类中没有非静态数据成员,并且最多一个具有非静态数据成员的基类,或者没有带有非静态数据成员的基类,并且 - 没有与第一个非静态数据成员相同类型的基类宏offsetof(type,member-designator)在本国际标准中接受一组受限制的类型参数 . 如果type不是标准布局类(第9节),则结果是未定义的

考虑到这些陈述是否有任何安全的方法使用 offsetof 依赖于模板参数的成员?如果没有,我怎样才能获得模板类中成员的偏移量?使用类似以下内容时可能不安全:

//MS Visual Studio 2013 definition

#define offsetof(s,m) (size_t)&reinterpret_cast((((s *)0)->m))

在非标准布局类?

根据标准,样品不安全的样品:

#include

#include

template

struct Test

{

int a;

T b;

};

struct NonStdLayout

{

virtual void f(){};

};

int main()

{

std::cout << offsetof(Test, b) << std::endl;

std::cout << offsetof(Test, b) << std::endl;

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值