Closure 형태라고 해야 되나요. Lambda Function, Anonymous Function 이라고 해야하나요.
아무튼, 이런게 절실 할때가 있습니다.
Lisp 기반에서는 이런게 정말 편해서 좋은데요. 막상 비슷한걸 하려면 참 막막하네요....
제가 생각할 수 있는 가장 쉽고 일반적인 방법은 추상 클래스를 만들어다가, 각각의 함수가 일일이
이 추상 클래스를 상속 받아 클래스 형태로 존재한 후 객체가 넘어가는 형태인데요.. 음.....
일단 대안은 되겠지만, 여러가지로 마음에 들지 않습니다. (1. 번거롭고, 데이타 자료 관리가 어렵습니다.)
무슨 좋은 방법 없을까요?
구체적인 예라면 성능 테스트를 위해 다양한 함수를 구현해놓고 각각을 수행하면서 비교하고 싶은데,
(자동화가 필수적인 상황입니다.)
일단 여러가지 이유로 함수 포인터는 불가능하고...
어설프게 클래스 만들어다가 관리해봤자 input, output 에 해당하는 arguments 들이 아주 제대로 지저분하게 되더군요. (물론 구조체로 묶는 것도 방법이긴 하겠습니다만....)
혹시 좋은 대안이 있는지 팁 좀 부탁드립니다.
Lambda 가 절실할 경우...(Anonymous Function)
Moderator: 류광
-
- Posts: 80
- Joined: 2007-10-04 10:56
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
비슷한걸로 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
-
- Posts: 480
- Joined: 2006-11-04 16:24
- Location: Creaty Networks
- Contact:
완전 근본적으로, 함수포인터를 쓰심은 어떠신지..
세상이 기다리는 나만의 SHOW!
----------------------------------------------
Zeprod 홈 : http://Zeprod.org
Project. Creaty : http://Creaty.net/
Creaty 게임제작 커뮤니티 : http://Creaty.net/game/
----------------------------------------------
----------------------------------------------
Zeprod 홈 : http://Zeprod.org
Project. Creaty : http://Creaty.net/
Creaty 게임제작 커뮤니티 : http://Creaty.net/game/
----------------------------------------------
말씀을 듣고 다시한번 생각해보니 사실 멤버 함수를 함수 포인터로 쓰지 못할 이유가 없더군요.Zeprod wrote:완전 근본적으로, 함수포인터를 쓰심은 어떠신지..
그래서 검색해보니....
http://zeph.tistory.com/155
이런 방법이면 제가 원하는 것들을 하기에 그렇게 큰 부족함은 없을 것 같기도 하네요.
한번 해봐야겠습니다...
람다라... 이런건 어떠신지
표준 C++라이브러리가 지원하는 펑터클래스를 이용하는 방법입니다.
C++은 그냥 람다 짜심을 추천합니다. ^^;
어찌됐건 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++에서 직접 지원하는 람다형태는 이게 거의 유일하네요.