【发布时间】:2009-05-26 23:47:37
【问题描述】:
假设我有 3 节课。我希望每个类的 sizeof() 完全相同——比如 512 个字节。
我怎样才能使用BOOST_STATIC_ASSERT 之类的东西来应用到所有这些
- 我只需要在一个地方使用
BOOST_STATIC_ASSERT(DRY原则) - 在编译时而非运行时评估一次
注意:我们可以使用任何我们想要的 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 );
【问题讨论】:
-
为什么你需要断言所有的大小都是 512(或其他一些幻数)?我问是因为这通常会告诉您是否需要重复自己,以及如果您不想重复自己,应该去哪里做这样的测试。例如,如果 512 是高速缓存行的大小,那么您需要将 A、B 和 C 与“完全适合高速缓存行”的一些概念相关联并在某处表达。
-
原因是因为所有这些类都是相关的,尽管一个共同点是它们的大小要求正好是 512 字节长。那么为什么会有不同的类呢?这是因为 A、B 和 C 表达不同类型的消息。
标签: c++ boost static-assert