如何在不使用宏的情况下实例化struct而获取struct成员的大小?

3 c++ templates

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

#define member_sizeof(T,F) sizeof(((T *)0)->F)
Run Code Online (Sandbox Code Playgroud)

到目前为止我得到了这个;

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; 
}
Run Code Online (Sandbox Code Playgroud)

但目标是在sizeof()不必实例化的情况下获得成员struct.

它必须与国际标准C++,ISO IS 14882:2003,无C++ 11一起使用.

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

Bri*_*ian 6

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

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