使用を提案するこの問題の解決策を見てきました
if( dynamic_cast<DerviedType1*>( base ) ){
// Do something
}
else if( dynamic_cast<DerviedType2*>( base ) ){
// Do something else
}
else if( dynamic_cast<DerviedType3*>( base ) ){
// Do another thing
}
// and so on
decltype
機能的ではありますが、このソリューションはエレガントとはほど遠いものであり、またはの行に沿って単一行のソリューションがあることを望んでいましたがtypeid
、どちらもここでは役に立ちません。
私の具体的な問題は次のとおりです。基本クラスのインスタンスへのポインターを引数として受け取る関数があります。この関数は、派生型をパラメーターとして受け取るテンプレート関数を呼び出します。例えば
void myFunc( Base *base )
{
myTemplateFunc<Derived>();
}
ステートメントの長いリストを使用せずに、コードをシンプルに保ちたいのif
ですが、どうすればよいかわかりません。Base
オブジェクト自体はテンプレート関数に渡されず、型のみが渡されることに注意してください。
参考までに、次のようなものを探しています
void myFunc( Base *base )
{
myTemplateFunc<decltype(base)>();
}
しかし、これはタイプのみを返すためBase
、ここでは役に立ちません。