如何静态断言许多类的公共属性

siv*_*udh 0 c++ boost static-assert

假设我有3个班级.我希望sizeof()每个类都完全相同 - 比方说512个字节.

我如何使用类似的东西BOOST_STATIC_ASSERT来应用于所有这些

  1. 我只需要BOOST_STATIC_ASSERT在一个地方使用(DRY原则)
  2. 在编译时评估一次而不是运行时

注意:我们可以使用我们想要的任何C++技术(创建更多类,使用继承等)

我天真的解决方案如下:

class A { ...stuff }; BOOST_STATIC_ASSERT( sizeof(A) == 512 );
class B { ...stuff }; BOOST_STATIC_ASSERT( sizeof(B) == 512 );
class C { ...stuff }; BOOST_STATIC_ASSERT( sizeof(C) == 512 );
Run Code Online (Sandbox Code Playgroud)

Nik*_*sov 9

这似乎适用于gcc 4.0.1和boost 1.39:


template <typename T, size_t S>
struct enforce_size
{
    enforce_size()
    {
        BOOST_STATIC_ASSERT( sizeof( T ) == S );
    }
};

class A: enforce_size<A,512> { /* stuff */ };