爲了簡潔的目的,這是簡化的層次:使用std :: is_base_of與類層次decltype
class IBase
{
public:
virtual ~IBase() = 0 { };
}; // eo IBase
class IDerived : public virtual IBase
{
public:
virtual ~IDerived() = 0 { };
}; // eo IDerived
class Base : public virtual IBase
{
public:
Base() { };
virtual ~Base() { };
}; // eo Base
class Derived : public IDerived
, public Base
{
}; // eo Derived
和一個函數來確定一個特定的指針指向一個類實現了通過「接口」 :
template<typename T>
bool same(IBase* base)
{
if(std::is_base_of<T, decltype(*base)>::value)
return true;
return false;
};
和樣本:
IDerived* i(new Derived());
bool isSame = same<IDerived>(i);
我知道我可能我錯用decltype
這裏。它似乎無論我嘗試,std::is_base_of<B,D>::value
總是false
。我想要這個函數做的是,回答這個問題:
對象是否指向從類型(T
)派生的模板參數?
謝謝你。我希望避免使用dynamic_cast。但看起來這是現在的方式。 –