게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C++에서 함수객체가 포함된 함수 템플릿을 명시적으로 호출할 수 있나요?
게시물ID : programmer_20864짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 548회
댓글수 : 2개
등록시간 : 2017/06/20 10:37:20
아래의 소스코드는 뇌를 자극하는 C++ STL교재의 예문인데요
 책에는 For_each함수를 호출하는 문장에서 <int*,void (*)(int)>가 삽입되어 있으므로 명시적으로 함수포인터가 포함된 함수 템플릿을 호출한다고 하는데요.

#include <iostream>
#include <string>
using namespace std;
template<typename IterT,typename Func>
void For_each(IterT begin,IterT end,Func fp)
{
while(begin!=end)
fp(*begin++);
}
template<typename T>
void Print(T data)
{
cout<<data<<" ";
}
int main()
{
int arr1[5]={1,2,3,4,5};
For_each<int*,void (*)(int)>(arr1,arr1+5,Print<int>);
return 0;
}
그런데
그 다음 책에나온 소스코드는 함수객체를 For_each함수 템플릿에서 호출한 건데
컴파일이나 실행시 전혀 오류는 없지만 한번 위의 소스코드처럼 명시적으로 함수템플릿을 호출하고 싶은데요.
For_each(arr,arr+5,PrintFunctor<int>());
For_each(arr1,arr1+3,PrintFunctor<string>("\n"));중에
For_each(arr,arr+5,PrintFunctor<int>());을 명시적으로 호출하고 싶다면  For_each와 매개변수 사이에 어떤 문장을 넣어야 명시적으로 함수 템플릿을 호출할 수 있나요?
책에는 전혀 나와있지 않아서 감을 잡을수 없지만 아무래도 <int*,???>형식의 선언문을 써야 할 것 같은데 함수 템플릿에서 명시적으로 호출하기 위해서 함수객체는 어떤 선언문을 삽입해야 하는지 제 능력으로는 도무지 알수 없네요.
알고 계시는 분이 있으시면 답변 좀 해주시면 좋겟습니다.

#include <iostream>
#include <string>

using namespace std;
 
template<typename IterT,typename Func>
void For_each(IterT begin,IterT end,Func fp)
{
while(begin!=end)
fp(*begin++);
}
template<typename T>
struct PrintFunctor
{
string sep;
public: 
explicit PrintFunctor(const string& s=" "):sep(s){}
void operator()(T data)
{
cout<<data<<sep;
}
};
int main()
{
int arr[5]={1,2,3,4,5};
For_each(arr,arr+5,PrintFunctor<int>());
cout<<endl;
string arr1[3]={"소","개","말"};
For_each(arr1,arr1+3,PrintFunctor<string>("\n"));
return 0;
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호