티스토리 툴바


개발2008/02/11 01:12
최근에 c++로 개발하면서 stl을 열심히 사용해보고 있습니다. c++ 초짜라 잘 몰라서 고생 많아요. (흑흑)

그러다가 local function object는 stl algorithm 류의 함수들의 인자로 사용하지 못한다는 것을 최근에
알게되었습니다. 예를 들면 다음과 같은 함수, 컴파일이 안됩니다.

void foo(const std::vector<int>& v) {
    using namespace std;

    struct IntPrinter: public unary_function<int, void> {
        IntPrinter(ostream& os, const string& delim): os(os), delim(delim) {}

        void operator()(int n) const { this->os << n << this->delim; }

        ostream& os;
        const string& delim;
    };

    for_each(v.begin(), v.end(), IntPrinter(cout, "\t"));
    cout << endl;

}


왜 그런지 알아보려고 여기저기 검색해보다가 잘 안나오더군요. 그래서 어딘가에 질문하려고 생각 정리하고 코딩하다가 짐작가는 바가 생겼습니다. local function object의 type을 for_each 같은 외부 함수에서 알 방법이 없더군요. stl algorithm function들과 같은 template function들은 function object의 type을 필요로 하는데, 위와 같이 foo()라는 함수 내에 있는 IntPrinter의 경우 외부에서 type을 명시할 수가 없습니다. 맞나요?

정확히 알고 계신분들이 이 글 보신다면 지적 부탁드립니다.


@ 참고로 위 코드는 걍 예제로 써먹기 좋은 코드를 쓴 것 뿐입니다. stl을 활용하면 아래와 같겠죠. :(

void foo(const std::vector<int>& v) {
    using namespace std;
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\t"));
    cout << endl;

}


Posted by 처로(alexchoi)
잡담2007/12/19 18:33
미투데이 접고 블로그에 다시 글 쓰기 시작했습니다. 오랜만이군요. 흠흠...

한줄 블로그는 부담없이 쓸 수 있고 편해서 자주 애용했습니다. 여러가지로 장점이 많았으나 습관적으로 푸념을 늘어놓는 공간이 되어서 쓰면서 몇 번 후회도 했었고, 짧게 표현하려다보니 생각도 같이 짧아지는 듯한 느낌이 들었습니다. 물론 미투데이 하시는 분들을 폄하하려는게 아니죠. 많은 분들이 짧은 문장으로 의미를 효율적으로 전달하기 위해서 고심하시는 것을 잘 알고있습니다~

굳이 탈퇴할 필요는 없었으나 제가 미련이 많은 성격인지라 과감하게 탈퇴하고 지웠습니다. 쓴 것들이 다 날아간게 좀 아쉽네요. 만박님께 조르면 복구될라나...;;

당분간 블로그에만 집중하겠습니다. 블로그도 다른 곳으로 옮길 생각이 있는데 어떻게 할지는 아직 정해지 못해서 일단 이곳에 계속 글을 쓰려고 합니다. 어차피 보시는 분들도 없어서 부담없이 제맘대로 할 수 있겠군요. :)
Posted by 처로(alexchoi)