我有以下层次:从基指针溯造型到模板派生类型
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