我有以下層次:從基指針溯造型到模板派生類型
class base
{
public:
virtual ~base(){}
virtual void foo() {}
};
template <typename T>
class derived1 : public base
{
virtual void foo() {};
};
template <typename T>
class derived2 : public base
{
virtual void foo() {};
};
現在給出一個指向基地,我想找出是否 底層或者是derived1或Derived2的。問題是 derived1和derived2可以專門用於許多不同的 類型,使用dynamic_cast測試downcast需要知道 模板類型。我已經結束了凌亂,不可靠和不完整的代碼位:
base* b = new derived1<int>();
if (dynamic_cast<derived1<int>*> ||
dynamic_cast<derived1<unsigned int>*> ||
dynamic_cast<derived1<double>*>)
std::cout << "is derived1";
else if (dynamic_cast<derived2<int>*> ||
dynamic_cast<derived2<unsigned int>*> ||
dynamic_cast<derived2<double>*>)
std::cout << "is derived2";
有沒有更好的方法,可以處理任何類型的專業化?
一旦您知道該類型是派生模板之一的特化,您打算做什麼? – 2012-03-05 02:20:09
@James:爲每一個函數調用一個特定的函數 - 順便說一句,有更多的derived1和derived2 – 2012-03-05 02:23:28
需要動態地測試基類指針的具體類型的條件代碼是一個糟糕的代碼味道。有可能有一種方法來改變你的設計,以避免這種情況。 – 2012-03-05 02:24:45