現在、私はソート機能のためにこれを持っています:
bool operator()( CVParent* lhs, CVParent* rhs )
{
double dFirstValue = reinterpret_cast< CVChild * >( lhs )->GetValue( m_lFeature );
double dSecondValue = reinterpret_cast< CVChild * >( rhs )->GetValue( m_lFeature );
....
}
現在、type-idはCVChild *としてハードコーディングされていますが、パラメーターにすることはできますか?CVParentの派生クラスごとに関数を記述したくありません。
編集:私はロストの推奨に基づいて変更を加えました:
class Compare_Functor
{
public:
Compare_Functor( const long& lFeature, const bool& bIsAscending )
{
m_lFeature = lFeature;
m_bIsAscending = bIsAscending;
}
template <class T>
bool operator()( CVParent* lhs, CVParent* rhs )
{
double dFirstValue = reinterpret_cast< T * >( lhs )->GetValue( m_lFeature );
double dSecondValue = reinterpret_cast< T * >( rhs )->GetValue( m_lFeature );
....
}
private:
long m_lFeature;
bool m_bIsAscending;
}
現在の使用法(stl sort関数呼び出しを修正する方法は?):std :: sort(m_pList、m_pList + GetCOunt()、Compare_Functor(lFeature、TRUE));
コードを修正しました。みんなの助けてくれてありがとう!
template <class T>
class Compare_Functor
{
public:
Compare_Functor( const long& lFeature, const bool& bIsAscending )
{
m_lFeature = lFeature;
m_bIsAscending = bIsAscending;
}
bool operator()( CVParent* lhs, CVParent* rhs )
{
double dFirstValue = reinterpret_cast< T * >( lhs )->GetValue( m_lFeature );
double dSecondValue = reinterpret_cast< T * >( rhs )->GetValue( m_lFeature );
....
}
private:
long m_lFeature;
bool m_bIsAscending;
}
//Usage
std::sort( m_pList, m_pList+GetCOunt(), Compare_Functor<CChild>(lFeature, TRUE) );