基本上我有4节课:
虚空
Meta:继承OverVoid
物理:与以上无关
移动:模板化的类
我希望move的模板仅接受OverVoid类型的对象,即OverVoid和Meta。
class OverVoid{
public:
virtual ~OverVoid(){
};
};
class Meta: public OverVoid{
};
class Physical{
public:
};
template<typename _Ty>
class Move{
};
我希望在编译时消除错误,
我知道有一种方法可以使用Boost,但是我不能使用Boost(我公司的开发问题)
有任何想法吗?
最佳答案
您可以隐藏非OverVoid
类型的类的模板定义
template<typename _Ty,
class = typename std::enable_if<std::is_base_of<OverVoid, _Ty>::value>::type>
class Move{
};
然后,当您尝试编译非OverVoid类型的类时,您会收到一条错误消息。
int main() {
Move<Meta> a;
Move<OverVoid> b;
Move<Physical> c;
// your code goes here
return 0;
}
错误:
prog.cpp: In function 'int main()':
prog.cpp:29:15: error: no type named 'type' in 'struct std::enable_if<false, void>'
Move<Physical> c;