我需要用内部类的大小公开一个编译时间常数。为此,我尝试了下一个代码:
#include <cassert>
struct A
{
//consider Private class as private for this example, just to be able to put the assert like this in main
class Private{};
enum { PrivateSize = sizeof(Private) };
};
int main()
{
//here I have warning on some compilers, signed/unsigned comparison
assert(A::PrivateSize == sizeof(A::Private));
}
我的问题是PrivateSize
在某些编译器上签名而在其他编译器上未签名,并且在将其与签名类型进行比较时收到警告。据我所知enum
,底层类型是实现定义的,不能强制为signed
or unsigned
。
您是否知道一种将sizeof(A::Private)
外部公开A
为编译时间常数但保持Private
类...私有的方法?请注意我不能使用constexpr
,因为代码将在一些旧的编译器上使用。