作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我现在没有可用的 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/
我是一名优秀的程序员,十分优秀!