<div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">아래의 소스코드는 뇌를 자극하는 C++ STL교재의 예문인데요</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"> 책에는 For_each함수를 호출하는 문장에서 <b style="margin:0px;padding:0px;"><int*,void (*)(int)></b>가 삽입되어 있으므로 명시적으로 함수포인터가 포함된 함수 템플릿을 호출한다고 하는데요.</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><br style="margin:0px;padding:0px;"></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"> <div style="margin:0px;padding:0px;">#include <iostream></div> <div style="margin:0px;padding:0px;">#include <string></div> <div style="margin:0px;padding:0px;">using namespace std;</div> <div style="margin:0px;padding:0px;">template<typename IterT,typename Func></div> <div style="margin:0px;padding:0px;">void For_each(IterT begin,IterT end,Func fp)</div> <div style="margin:0px;padding:0px;">{</div> <div style="margin:0px;padding:0px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>while(begin!=end)</div> <div style="margin:0px;padding:0px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>fp(*begin++);</div> <div style="margin:0px;padding:0px;">}</div> <div style="margin:0px;padding:0px;">template<typename T></div> <div style="margin:0px;padding:0px;">void Print(T data)</div> <div style="margin:0px;padding:0px;">{</div> <div style="margin:0px;padding:0px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>cout<<data<<" ";</div> <div style="margin:0px;padding:0px;">}</div> <div style="margin:0px;padding:0px;">int main()</div> <div style="margin:0px;padding:0px;">{</div> <div style="margin:0px;padding:0px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>int arr1[5]={1,2,3,4,5};</div> <div style="margin:0px;padding:0px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>For_each<b style="margin:0px;padding:0px;"><int*,void (*)(int)></b>(arr1,arr1+5,Print<int>);</div> <div style="margin:0px;padding:0px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>return 0;</div> <div style="margin:0px;padding:0px;">}</div></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">그런데</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">그 다음 책에나온 소스코드는 함수객체를 For_each함수 템플릿에서 호출한 건데</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">컴파일이나 실행시 전혀 오류는 없지만 한번 위의 소스코드처럼 명시적으로 함수템플릿을 호출하고 싶은데요.</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">For_each(arr,arr+5,PrintFunctor<int>());</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span style="margin:0px;padding:0px;">For_each(arr1,arr1+3,PrintFunctor<string>("\n"));중에</span></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">For_each(arr,arr+5,PrintFunctor<int>());을 명시적으로 호출하고 싶다면 For_each와 매개변수 사이에 어떤 문장을 넣어야 명시적으로 함수 템플릿을 호출할 수 있나요?</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span style="margin:0px;padding:0px;">책에는 전혀 나와있지 않아서 감을 잡을수 없지만 아무래도 </span><b style="margin:0px;padding:0px;"><int*,???></b>형식의 선언문을 써야 할 것 같은데 함수 템플릿에서 명시적으로 호출하기 위해서 함수객체는 어떤 선언문을 삽입해야 하는지 제 능력으로는 도무지 알수 없네요.</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">알고 계시는 분이 있으시면 답변 좀 해주시면 좋겟습니다.</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><br style="margin:0px;padding:0px;"></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">#include <iostream></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">#include <string></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><br style="margin:0px;padding:0px;"></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">using namespace std;</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"> </div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">template<typename IterT,typename Func></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">void For_each(IterT begin,IterT end,Func fp)</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">{</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>while(begin!=end)</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>fp(*begin++);</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">}</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">template<typename T></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">struct PrintFunctor</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">{</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>string sep;</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">public: </div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>explicit PrintFunctor(const string& s=" "):sep(s){}</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>void operator()(T data)</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>{</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>cout<<data<<sep;</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>}</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">};</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">int main()</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">{</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>int arr[5]={1,2,3,4,5};</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span><b style="margin:0px;padding:0px;">For_each(arr,arr+5,PrintFunctor<int>());</b></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>cout<<endl;</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>string arr1[3]={"소","개","말"};</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span><b style="margin:0px;padding:0px;">For_each(arr1,arr1+3,PrintFunctor<string>("\n"));</b></div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;"><span class="Apple-tab-span" style="margin:0px;padding:0px;white-space:pre;"></span>return 0;</div> <div style="margin:0px;padding:0px;color:#404040;font-family:sans-serif;font-size:13px;">}</div> <div><br></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.