2

是否可以编写引用“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);}
4

2 回答 2

2

问题在于它BOOST_STATIC_ASSERT是一个,它解析为一个 C++ 构造,其中您的this关键字具有不同的含义。

要解决这个问题,你可以试试这个:

struct blah
{
   void func()
   {
      const size_t mySize = sizeof(*this);
      BOOST_STATIC_ASSERT(mySize);
   }
};
于 2013-06-28T22:44:24.020 回答
0

我在GCC explorere中尝试了你的代码,它编译得很好。不知道为什么增强版本不起作用,尤其是有那个错误。

struct blah
{
  int a, b;
   void func() {static_assert(sizeof(*this) > 4, "big");} // triggers if you remove b.
};

// -Wall -pedantic --std=c++11
于 2013-06-28T22:30:04.523 回答