【发布时间】:2013-06-28 22:19:41
【问题描述】:
是否可以编写引用“this”指针的静态断言?我没有可用的 c++11,并且 BOOST_STATIC_ASSERT 不起作用。
struct blah
{
void func() {BOOST_STATIC_ASSERT(sizeof(*this));}
};
生产:
error C2355: 'this' : can only be referenced inside non-static member functions
error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE'
在 MSVC 2008 中。
动机:
#define CLASS_USES_SMALL_POOL() \
void __small_pool_check() {BOOST_STATIC_ASSERT(sizeof(*this) < SMALL_MALLOC_SIZE;} \
void* operator new(size_t) {return SmallMalloc();} \
void operator delete(void* p) {SmallFree(p);}
【问题讨论】:
-
我以为 sizeof 总是编译时间?这适用于示例,但我试图在不重复命名类型的情况下实现宏,请参阅动机部分。
-
没关系。这里是凌晨 1 点 30 分。不应该在这种时候回答问题。你是对的。
*this具有明确定义的类型。 -
int unused[SMALL_MALLOC_SIZE-sizeof(*this)]; -
也许你的
__small_pool_check实际上是静态的。或者你写了static CLASS_USES_SMALL_POLL()... -
@MarcGlisse 不错!!!
标签: c++ boost this static-assert