由于c++模板参数的约束是C++20之后的标准,如果之前的C++标准想要实现类似的效果可以通过添加这段代码:
static_assert(std::is_base_of<ISystem, TSystem>::value, "类型必须继承自ISystem");
如果子类不是继承自相应的基类编译会抛出断言。
完整实例:
template<typename TSystem>
inline void BaseApp::RegisterSystem(shared_ptr<TSystem> system)
{
static_assert(std::is_base_of<ISystem, TSystem>::value, "类型必须继承自ISystem");
_ioc.RegisterInstance<TSystem>(system);
shared_ptr<ISystem> sys = system;
sys->SetApp(this);
if (_bInit)
sys->Init();
else
_systemList.push_back(sys);
}