我现在没有可用的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一起使用.
在C++ 11中,可以sizeof(T::F)直接编写,T类型在哪里,F是成员的名称.所以不需要宏.
在C++ 03中,这是不允许的(§5.1/ 10).据我所知,宏是最好的方法.成员的名字本身毫无意义; 你需要它所属的类,或者该类的一个对象,并且所有的构造都很笨拙,所以最好只定义一个宏,就像你拥有的那样.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |