在我的应用程序中,有一个继承层次结构,其中只有位于继承链末端的类是非抽象类。还有一些 boost::variant 的用法。我想编写一个函数,它接受一个指针和一个类型,并说明对象是否属于该类型。
例如
#define IsA(nodeptr, type) ( checkType<type>(nodeptr) )
template<typename Type, bool isAbstract, typename PtrType >
class CheckType
{
bool operator()( PtrType* ptr ) { return ( typeid(*ptr) == typeid(Type) ); }
};
template<typename Type, typename PtrType >
class CheckType < Type, true, PtrType >
{
bool operator()( PtrType* ptr ) { return ( dynamic_cast<Type*>(ptr) != NULL ); }
};
template<typename Type, BOOST_VARIANT_ENUM_PARAMS(typename T) >
class CheckType< Type, false, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
bool operator()( boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>* ptr )
{
return ( ptr->type() == typeid(Type) );
}
}
template< typename Type, typename PtrType >
bool checkType( PtrType* nodePtr )
{
CheckType<Type, boost::is_abstract<PtrType>::value, PtrType> check;
return check(nodePtr);
}
现在,如果有一个 boost 变体,我想知道 boost 变体是否存储了该特定类型。有人可以帮我吗?我不想添加额外的参数来确定它是否是变体。即使是为了找出抽象性,我也在使用 boost::is_abstract..
谢谢,戈库尔。