在我的應用程序中,有一個繼承層次結構,其中只有位於繼承鏈末尾的類是非抽象類。還有一些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 :: is_abstract ..
謝謝, Gokul。
does dynamic_cast是否爲您填寫賬單? – 2010-04-21 15:08:23
我們想盡可能使用typeid來代替動態投射。 Boost :: Variant不適用於動態轉換 – Gokul 2010-04-22 04:46:45