gpt4 book ai didi

c++ - 如何在不使用宏的情况下在不实例化结构的情况下获取结构成员的大小?

转载 作者:太空狗 更新时间:2023-10-29 20:25:30 26 4
gpt4 key购买 nike

我现在没有可用的 C++ 环境,一位同事想要一些关于如何用模板函数替换以下宏的建议,

#define member_sizeof(T,F) sizeof(((T *)0)->F)

到目前为止我已经明白了;

struct X { int x; double z; }; 
template<class T> inline T member_size();
int main()
{
std::cout << sizeof(member_size<X>().x) << std::endl;
std::cout << sizeof(member_size<X>().z) << std::endl;
return 0;
}

但目标是让 sizeof() 成为成员,而不必实例化 struct

而且它必须与 C++ 国际标准 ISO IS 14882:2003 一起工作,不幸的是没有 C++11。

如果有,等效的模板解决方案是什么?

最佳答案

在 C++11 中,可以直接编写 sizeof(T::F),其中 T 是类型,F 是成员的名字。所以不需要宏。

在 C++03 中这是不允许的 (§5.1/10)。据我所知,宏是执行此操作的最佳方法。成员的名字本身是没有意义的;你需要它所属的类,或者那个类的一个对象,所有的构造都很笨拙,所以最好只定义一个宏,就像你拥有的那样。

关于c++ - 如何在不使用宏的情况下在不实例化结构的情况下获取结构成员的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com