サンプル
#include
<typeinfo>
class
Shape{
public
:
virtual
~Shape()=0;
};
class
Circle :
public
Shape{};
class
Square :
public
Shape{};
void
function(
const
Shape * s)
{
if
(
typeid
(*s)==
typeid
(Circle))
{
//Circle に対する何らかの処理
}
else if
(
typeid
(*s)==
typeid
(Square))
{
//Square に対する何らかの処理
}
}
ソリューション
固有 ID を戻す仮想 classOf() 関数を使用してクラスを実装するか、動的キャストが成功したかどうかテストします。
class
Shape{
public
:
virtual
~Shape()=0;
};
class
Circle :
public
Shape{};
class
Square :
public
Shape{};
void
function(
const
Shape * s)
{
Shape *sh =
const_cast
<Shape*> (s);
if
(
dynamic_cast
<Circle *>(sh)
)
{
//Circle に対する何らかの処理
}
else if
(
dynamic_cast
<Square *>(sh)
)
{
//Square に対する何らかの処理
}
}