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

标签 c++ templates

我现在没有可用的 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/

相关文章:

c++ - 调用 IWebBrowser2->get_Document 时出现错误 800706B5

用于开关逻辑的 C++

c++ - 如何让 NDK 调试在 Android Studio 中工作?

templates - 如何从已解析的模板中获取模板 'actions' 的 map 或列表?

c++ - 在派生类中调用模板基类的cast操作符

c++ - 抽象基类 : How do you define a copy constructor or assignment operator for a class that contains a pointer to a (abstract) base class?

c++ - 为什么 std::swap 不适用于 std::bitset<n> 内容?

c++ - 重载策略类​​模板的成员函数

c++ - 无法编译在不同类上调用静态函数的代码

c++ - 泛化返回基于对象和类方法的可调用函数的函数