次の階層があります。
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() {};
};
base へのポインターが与えられたので、基になるものが派生 1 か派生 2 かを調べたいと思います。問題は、派生1と派生2の両方が多くの異なる型に特化できることです.dynamic_castを使用してダウンキャストをテストするには、テンプレートの型を知る必要があります. 私は厄介で、保守不可能で、不完全なコードのビットになってしまいました:
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";
型の特殊化を処理できるより良い方法はありますか?