Pointer auf zwei verschiedene Viewklassen mit einer Funktion

ensae

Grünschnabel
Hallo,

folgendes Problem: Ich habe in einem SDI-Projekt zwei verschiedene
Viewklasse, auf die ich zugreifen muss. Bisher beschaffe ich mir den
jeweiligen Pointer in zwei Funktionen, die bis auf den Namen der View-
klasse absolut identisch sind:

Code:
CViewKlasse1* CMainFrame::GetViewKlasse1()
{
  CProjektDoc* pDoc=(CProjektDoc*) GetActiveDocument();	
  POSITION pos = pDoc->GetFirstViewPosition();
  while (pos != NULL)
  {
    CView* pView = pDoc->GetNextView(pos);
    if ( (pView->IsKindOf(RUNTIME_CLASS(CViewKlasse1)))&&(pView))
    {
      return (CViewKlasse1*)pView;
    }			
  }
  return NULL;
}

Code:
CViewKlasse2* CMainFrame::GetViewKlasse2()
{
  CProjektDoc* pDoc=(CProjektDoc*) GetActiveDocument();	
  POSITION pos = pDoc->GetFirstViewPosition();
  while (pos != NULL)
  {
    CView* pView = pDoc->GetNextView(pos);
    if ( (pView->IsKindOf(RUNTIME_CLASS(CViewKlasse2)))&&(pView))
    {
      return (CViewKlasse2*)pView;
    }			
  }
  return NULL;
}

Ich würde das nun gerne mit einer einzigen Funktion machen. Ich
habe es mit einer Template-Funktion versucht, es aber nicht hinbe-
kommen. Wäre das der richtige Weg?

Gruß

Christian
 
Nun, das Einfachste wäre wohl das hier:
Code:
CView* CMainFrame::GetViewByClass(CRuntimeClass * pRC)
       {
       CProjektDoc* pDoc=(CProjektDoc*) GetActiveDocument();
       POSITION pos = pDoc->GetFirstViewPosition();
       while (pos != NULL)
       {
     	CView* pView = pDoc->GetNextView(pos);
     	if ( (pView->IsKindOf(pRC))&&(pView))
     	{
     	   return pView;
     	}
       }
       return NULL;
       }
Der Aufruf wäre dann:
Code:
CViewKlasse1* pView1;
        pView1=(CViewKlasse1*)GetViewByClass(RUNTIME_CLASS(CViewKlasse1));
 
Zurück