内部クラスのサイズでコンパイル時定数を公開する必要があります。そうするために、次のコードを試しました:
#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
一部のコンパイラで署名され、他のコンパイラでは署名されていないことです。署名された型と比較すると、これに関する警告が表示されます。私の知る限り、の基になる型は実装定義であり、強制的にorenum
にすることはできません。signed
unsigned
コンパイル時定数としてsizeof(A::Private)
外部に公開する方法を知っていますが、クラスをプライベートに保ちますか? コードは一部の古いコンパイラで使用されるため、使用できないことに注意してください。A
Private
constexpr