Lambda 가 절실할 경우...(Anonymous Function)

프로그래밍 일반에 관한 포럼입니다.

운영자: 류광

Locked
비회원

Lambda 가 절실할 경우...(Anonymous Function)

전체글 글쓴이: 비회원 » 2009-11-11 09:37

Closure 형태라고 해야 되나요. Lambda Function, Anonymous Function 이라고 해야하나요.
아무튼, 이런게 절실 할때가 있습니다.
Lisp 기반에서는 이런게 정말 편해서 좋은데요. 막상 비슷한걸 하려면 참 막막하네요....


제가 생각할 수 있는 가장 쉽고 일반적인 방법은 추상 클래스를 만들어다가, 각각의 함수가 일일이
이 추상 클래스를 상속 받아 클래스 형태로 존재한 후 객체가 넘어가는 형태인데요.. 음.....

일단 대안은 되겠지만, 여러가지로 마음에 들지 않습니다. (1. 번거롭고, 데이타 자료 관리가 어렵습니다.)
무슨 좋은 방법 없을까요?

구체적인 예라면 성능 테스트를 위해 다양한 함수를 구현해놓고 각각을 수행하면서 비교하고 싶은데,
(자동화가 필수적인 상황입니다.)
일단 여러가지 이유로 함수 포인터는 불가능하고...
어설프게 클래스 만들어다가 관리해봤자 input, output 에 해당하는 arguments 들이 아주 제대로 지저분하게 되더군요. (물론 구조체로 묶는 것도 방법이긴 하겠습니다만....)

혹시 좋은 대안이 있는지 팁 좀 부탁드립니다.

블루
전체글: 80
가입일: 2007-10-04 10:56

전체글 글쓴이: 블루 » 2009-11-11 10:09

boost에 lambda가 있읍니다만, 사용 가능한 경우가 상당히 제한적이고요..
비슷한걸로 boost.bind나 boost.function 정도면 어떨까요.

http://www.boost.org/doc/libs/1_40_0/do ... ambda.html
http://www.boost.org/doc/libs/1_40_0/li ... /bind.html
http://www.boost.org/doc/libs/1_40_0/do ... ction.html

비회원

전체글 글쓴이: 비회원 » 2009-11-11 10:14

boost 라이브러리에 람다가 있고 VS 2010에서는 람다가 들어갔다는데........

그건 어떨까요?

비회원

전체글 글쓴이: 비회원 » 2009-11-11 11:04

VS 2010 의 람다 기능은 잘 모르긴하지만, 일단 그런 방식을 사용하기는 힘든 상황이구요.
boost 의 람다도 이 기회에 한번 알아보겠습니다. +_+
(하지만 살짝 들여다본 것으로는 제가 사용하기에는 조금 힘들듯 하긴 하네요. ^^;
제가 하려는건 함수 하나하나가 사실상 매우 큰 경우가 많고 실질적으로 여러 함수들의 반복이 일어나는 것이 목적이 아니라 원하는 함수를 실행하려는 것이 목적이라서요....;;

boost 의 람다는 왠지 작은 함수들 여러번 돌리는 것에 초점이 맞춰져 있는 듯 한.........)

사용자 아바타
Zeprod
전체글: 480
가입일: 2006-11-04 16:24
사는 곳: Creaty Networks
연락처:

전체글 글쓴이: Zeprod » 2009-11-11 16:44

완전 근본적으로, 함수포인터를 쓰심은 어떠신지..
세상이 기다리는 나만의 SHOW!
----------------------------------------------
Zeprod 홈 : http://Zeprod.org
Project. Creaty : http://Creaty.net/
Creaty 게임제작 커뮤니티 : http://Creaty.net/game/
----------------------------------------------

비회원

전체글 글쓴이: 비회원 » 2009-11-11 18:30

Zeprod 작성:완전 근본적으로, 함수포인터를 쓰심은 어떠신지..
말씀을 듣고 다시한번 생각해보니 사실 멤버 함수를 함수 포인터로 쓰지 못할 이유가 없더군요.
그래서 검색해보니....

http://zeph.tistory.com/155
이런 방법이면 제가 원하는 것들을 하기에 그렇게 큰 부족함은 없을 것 같기도 하네요.
한번 해봐야겠습니다...

비회원

람다라... 이런건 어떠신지

전체글 글쓴이: 비회원 » 2009-11-16 01:29

표준 C++라이브러리가 지원하는 펑터클래스를 이용하는 방법입니다.
#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
#include <stdlib.h>

void main()
{
using namespace std;

vector<int> vecNum;
vecNum.resize(10, 0);

class AssignAndPrint : unary_function<int, void>
{
public:
result_type operator()(argument_type& n)
{
n = rand();
std::cout << n << std::endl;
}
};

for_each(vecNum.begin(), vecNum.end(), AssignAndPrint());
}
다른 언어에서 직접 지원하는 무명함수나 무명클래스에 비해서는 조올라 개구린...
C++은 그냥 람다 짜심을 추천합니다. ^^;
어찌됐건 C++에서 직접 지원하는 람다형태는 이게 거의 유일하네요.

Locked