C++ 公开私有内部类大小

C++ 公开私有内部类大小,c++,enums,compile-time-constant,C++,Enums,Compile Time Constant,我需要公开一个具有内部类大小的编译时常量。为此,我尝试了下一个代码: #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) }; };

我需要公开一个具有内部类大小的编译时常量。为此,我尝试了下一个代码:

#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在某些编译器上是有符号的,而在其他编译器上是无符号的,当将它与有符号类型进行比较时,我会收到有关这方面的警告。据我所知,枚举的基础类型是实现定义的,不能强制进行签名或取消签名

您知道一种将sizeofA::Private作为编译时常量公开在外部,但保留私有类的方法吗。。。私有的请注意,我不能使用constexpr,因为代码将在一些旧编译器上使用。

以下工作:

struct A
{
    friend int main(int argc, char *argv[]); // For test purpose
private:
    class Private{};
public:
    static const unsigned int PrivateSize = sizeof (Private);
};

int main(int argc, char *argv[])
{
    assert(A::PrivateSize == sizeof(A::Private));
    return 0;
}
以下工作:

struct A
{
    friend int main(int argc, char *argv[]); // For test purpose
private:
    class Private{};
public:
    static const unsigned int PrivateSize = sizeof (Private);
};

int main(int argc, char *argv[])
{
    assert(A::PrivateSize == sizeof(A::Private));
    return 0;
}

我想你不能改变A@DieterLücking我可以更改A,但我必须保持内部类私有。您可以使用static const unsigned PrivateSize而不是enum来避免警告。持有assert的友元函数将执行此操作,我假设您无法更改A@DieterL妈的,我可以换一个,但是我必须保持内部类PrivateSize您可以使用static const unsigned PrivateSize而不是enum来避免警告。持有assert的友元函数可以做到这一点