解决方法
你没有提供任何有意义的细节,你想做什么,所以很难弄清楚你需要什么.
你可以通过你自己的模板功能来“包装”sizeof
template <typename T> size_t my_sizeof() { return sizeof(T); }@H_403_9@然后使用它作为
size_t s = my_sizeof<int>();@H_403_9@有时可以遇到一个请求来实现类似sizeof的功能,而不使用sizeof.像这样的请求没有任何实际意义,但有时被用作作业作业.人们可以做到如下
template <typename T> size_t my_sizeof() { T t; return (char *) (&t + 1) - (char *) &t; }@H_403_9@这将需要一个默认的可构建的T.一个较少的限制,但正式非法的解决方案(一个黑客)将是类似的
template <typename T> size_t my_sizeof() { return (char *) ((T *) NULL + 1) - (char *) (T *) NULL; }@H_403_9@上述实现实现基于类型的sizeof.
试图模拟基于价值的sizeof的功能可能如下所示
template <typename T> size_t my_sizeof(const T& obj) { return my_sizeof<T>(); }@H_403_9@但是,如果至少因为内置的sizeof不能评估其参数,那么这不会远远地等同于内置的sizeof.
最后,这些实现都不会产生积分常数表达式(ICE),如内置sizeof所示.在当前版本的语言中不可能实现ICE的制作.
无论如何,这一切当然完全没有实际价值.只要使用sizeof,当你想知道的大小.