Sca*_*ark 4 c++ templates boost c++03
我有一个模板课
template< std::size_t Size >
class Buffer
{
....
};
Run Code Online (Sandbox Code Playgroud)
当Size参数为零时,我想阻止此模板的实例化.即为以下内容生成编译器警告.
Buffer< 0 > buf;
Run Code Online (Sandbox Code Playgroud)
但所有其他变种都可行.
Buffer< 10 > buf;
Run Code Online (Sandbox Code Playgroud)
我正在寻找使用boost :: enable_if_c,但我不明白如何让它工作.
- 更新 - 遗憾的是,我无法使用任何c ++ 11功能
Nob*_*ody 10
只需将模板专门化为无法实例化的状态:
template <>
class Buffer<0>;
Run Code Online (Sandbox Code Playgroud)
这样就无法构建类.使用将导致:
error: aggregate ‘Buffer<0> buf’ has incomplete type and cannot be defined
使用BOOST_STATIC_ASSERT可能更容易:
#include <boost/static_assert.hpp>
template< std::size_t Size >
class Buffer
{
BOOST_STATIC_ASSERT(Size != 0);
};
int main()
{
Buffer<0> b; //Won't compile
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您的编译器支持它,请尝试static_assert:
template< std::size_t Size >
class Buffer
{
static_assert(Size != 0, "Size must be non-zero");
// ...
};
Run Code Online (Sandbox Code Playgroud)