자료 저장소

# 제네릭 함수(generic function)

어떤 종류의 컨테이너나 type에 대한 제약없이 사용할 수 있는 함수를 제네릭 함수라고 부른다.
제네릭 함수를 구현하는 언어적 기능을 소위 템플릿 함수(template function)이라고 부른다.
템플릿 함수는유사하게 동작하는 함수 그룹, 또는 타입 그룹에 대해 하나의 정의를 사용할 수 있도록 해준다.
단, 그 템플릿 매개변수(template parameters)의 타입은 다르게 정해 주어야 한다.

[템플릿을 이용해서 문장을 단어로 나누는 함수 예제]
#include <iostream> 
#include <string>
#include <iterator>
#include <algorithm>

usingnamespacestd;

bool not_space(int c)
{
return !isspace(c);
}

bool space(int c)
{
return isspace(c);
}

template <class Out>
void split(conststring& str, Out os)
{
typedefstring::const_iterator iter;

iter i = str.begin();

while(i != str.end() )
{
i = find_if(i, str.end(), not_space);

iter j = find_if(i, str.end(), space);

if(i != str.end())
*os++ = string(i,j);

i=j;
}
}

int main()
{
string s;

// cout에 연결된 ostream_iterator<string>을 split 함수에 전달하여, cout에 출력한다.
// split가 *os에 값을 대입하는 순간 cout에 출력하게 된다.
while(getline(cin,s))
split(s,ostream_iterator<string>(cout,"\n"));

// word_list라는 list에 추가하고자 하는 단어가 string이라면
// split(s,back_inserter(word_list)); 이 처럼 사용가능하다.

return0;
}
댓글 로드 중…

최근에 게시된 글