Wis*_*lil 0 c++ polymorphism inheritance templates
基本上我有4个班:
我希望move的模板接受只有OverVoid类型的对象,即OverVoid和Meta.
class OverVoid{
public:
virtual ~OverVoid(){
};
};
class Meta: public OverVoid{
};
class Physical{
public:
};
template<typename _Ty>
class Move{
};
Run Code Online (Sandbox Code Playgroud)
我想在编译时输入一个错误,我知道有一种方法可以使用boost但我不能使用Boost(与我公司的dev问题)
有任何想法吗?
最简单的事情就是static_assert:
template<typename _Ty>
class Move {
static_assert(std::is_base_of<OverVoid, _Ty>::value,
"_Ty must inherit from OverVoid.");
};
Run Code Online (Sandbox Code Playgroud)
请注意,这允许OverVoid是私有或不可访问的基础.如果您想要求它是公共基础,您可以要求:
static_assert(std::is_convertible<_Ty*, OverVoid*>::value,
"_Ty must inherit publicly from OverVoid.");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |