【C++】实现模板参数约束

由于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);
}

posted @ 2022-10-03 23:48  香菇0_0  阅读(54)  评论(0)    收藏  举报