公开私人内部班级规模

时间:2014-01-30 14:14:35

标签: 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) };
};

int main()
{
    //here I have warning on some compilers, signed/unsigned comparison
    assert(A::PrivateSize == sizeof(A::Private));
}

我的问题是PrivateSize在某些编译器上签名而在其他编译器上未签名,我在与签名类型进行比较时会收到有关此问题的警告。据我所知enum的基础类型是实现定义的,不能强制为signedunsigned

您是否知道在sizeof(A::Private)之外公开A作为编译时常量的方法,但保持Private类...私有?请注意我无法使用constexpr,因为代码将用于某些旧编译器。

1 个答案:

答案 0 :(得分:4)

以下作品:

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;
}