2012-10-01 4 views
1

C++에서 객체의 양단 나는 다음과 같이 구성 여러 컨트롤이 있습니다. 한 번에 전체 deque를 표시하거나 숨기고 싶습니다. 각 deque에 대한 여러 메소드가 필요하지 않습니다. 어떻게 할 수 있니?상속과

나는 각 컨트롤에 대한 wxWindow의 양단을 만들기에 대해 생각했다, 그래서 나는이 방법을 쓸 수

ShowDeque(deque<wxWindow*> deque) 

너무 쉽게 것이지만, 다른 한편으로는, 내가 예를 들어, 작업하려는 경우 보여주는 콤보 상자, wxComboBox에 다시 입력해야합니다. 다른 가능성이 있습니까? 감사.

답변

2

사용 : 다른 deques에 대한

for_each(dequeEdit.begin(), dequeEdit.end(), mem_fun(&wxWindow::Show)); 

동일합니다.

또는 하나 개의 함수로 캡슐화 :

template <class Deque> 
void showAll(const Deque& dequeObj) 
{ 
    using namespace std; 
    for_each(dequeObj.begin(), dequeObj.end(), mem_fun(&wxWindow::Show)); 
} 

showAll(dequeEdit); 
  1. std::for_each : http://en.cppreference.com/w/cpp/algorithm/for_each
  2. std::mem_fun : http://en.cppreference.com/w/cpp/utility/functional/mem_fn
+0

mem_fun은 mem_fun_ref가 아니어야한다. –

+0

@BleepBloop - 감사합니다! – PiotrNycz

+0

@ChristianSeverin 감사합니다! – PiotrNycz

2

당신은 함수 템플릿을 사용할 수 있습니다.

template <typename T> 
void show_all(const std::deque<T*>& d) { 
    for (typename std::deque<T*>::iterator it=d.begin(); it!=d.end(); ++it) 
     (*it)->Show(); 
} 

정상적인 기능처럼 호출 할 수 있습니다. 함수 템플릿

deque<wxTextCtrl*> dequeEdit; 
deque<wxStaticText*> dequeText; 
deque<wxComboBox*> dequeCombo; 

show_all(dequeEdit); 
show_all(dequeText); 
show_all(dequeCombo); 

당신도 당신이 추가 템플릿 인수를 추가하여 사용하는 컨테이너의 show_all 독립 할 수 있습니다.

template <typename C, typename T> 
void show_all(const C<T*>& d) { 
    for (typename C<T*>::iterator it=d.begin(); it!=d.end(); ++it) 
     (*it)->Show(); 
} 

C 다음 반복기 동일한 인터페이스를 지원하는 STL 용기, 또는 임의의 용기 일 수있다.

+0

'typename'을 잊어 버렸습니다. – Puppy

+0

@DeadMG : 고침, 고마워. –

1

이 있다면 간단한 방법은 그것을 템플릿합니다

template <typename WxT> 
void ShowDeque(std::deque<WxT*> &d) { ... } 

이상이 밖으로 추상적 인 컨테이너 유형에 반복자를 사용하십시오 :

template <typename WxIter> 
void ShowDeque(WxIter begin, WxIter end) { ... } 

또는 더 나은 아직 표준 기능을 사용 (표트르 비트 나를 입력하는 동안 그 하나에 나를 보내라!)