2
我需要暴露一个编译时间常量与内部类的大小。要做到这一点我想下面的代码:公开私有内部类的大小
#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
或unsigned
。
你知道一种方法来暴露A
之外sizeof(A::Private)
作为编译时间常数,但保持Private
类...私人?请注意,我不能使用constexpr
,因为代码将用于一些旧的编译器。
我想你不能改变一个 –
@DieterLücking我可以改变,但我必须保持内部类私有 – Felics
你可以使用'静态常量无符号PrivateSize'而不是枚举避免警告。 – Jarod42