我有一个类,它是一个包装类(作为一个通用接口)围绕另一个实现所需功能的类.所以我的代码看起来像这样.
templateclass WrapperClass { // the code goes here }
现在,我如何确保ImplementationClass
只能从一组类派生,类似于java的泛型
extends BaseClass>
句法?
它很冗长,但你可以这样做:
#include#include struct base {}; template class WrapperClass; template class WrapperClass >::type> {}; struct derived : base {}; struct not_derived {}; int main() { WrapperClass x; // Compile error here: WrapperClass y; }
这需要与标准的良好支持编译器(最近编译器应该是Visual C++会不会是好的,但旧版本).有关更多信息,请参阅Boost.Enable_If文档.
正如Ferruccio所说,一个更简单但功能更弱的实现:
#include#include struct base {}; template class WrapperClass { BOOST_STATIC_ASSERT(( boost::is_base_of ::value)); };