如何对template参数加一些限制?
比如:
class Managed;template<typename T> class Manager;
if (dynamic_cast<T*>(reinterpret_cast<Manager*>(0))){ Manager<T> mgr; // T一定为Manager的之类}
[解决办法]
BOOST_MPL_ASSERT_MSG(boost::is_base_of<Managed, T>::value, ...
或者你也可以直接在模版函数里把参数 T* 转型为 Managed*, 如果 T 是 Managed 的子类, 编译通过, 一切正常. 如果不是, 产生编译错误. 只是错误的消息不是那么直观
[解决办法]
#include <type_traits>class Managed;template<typename T>class Manager{ static_assert(std::is_base_of<Managed,T>::value,"");};class Managed { };class derived : public Managed { };class nonderived { };int main (){ Manager<derived> t; Manager<nonderived> tt; // error : static_assert failed return 0;}