2012-11-24 6 views
1

한 줄에 std 이외의 다른 라이브러리를 사용하지 않고 다른 함수의 매개 변수로 함수를 전달하는 가장 빠르고 가장 짧은 방법은 무엇입니까?함수를 매개 변수로 전달하는 방법은 무엇입니까?

나는의 우리가 * 기능을 실행 x0에서 루프를 실행하는 기능 forloop(int x, *) {...} 있다고 가정 해 봅시다 의미; 함수 호출은 forloop(3, **() { std::cout "Hi!"; });과 같아야합니다.

추신 : * 및은및 **은 인수 별 함수 유형 및 인수로 함수를 전달하는 방법의 자리 표시 자입니다.

+0

['for_each'] (http://en.cppreference.com/w/cpp/algorithm/for_each)를 사용해야합니다. –

답변

2

C++ (11)는 익명의 기능을 제공합니다

forloop(3, []{ std::cout "Hi!"; }); 

: 당신은 몇 가지 옵션을 찾고 있습니다

#include <iostream> 
#include <functional> 

void forloop(int times, std::function<void()> f) { 
    for(int i = 0; i < times; i++) { 
     f(); 
    } 
} 

int main() { 
    forloop(3, []() { std::cout << "Hello world"; }); 
} 
+0

'*'의 타입은 무엇입니까? – Shoe

+0

@Jeffrey 형식이'std :: function '- 포함 phant0m

+0

@ phant0m : 아니요, 변환 될 ** ** std :: function '이됩니다. 그것의 정확한 타입은 불특정하지만'decltype'에 의해 얻어 질 수 있습니다. –

0

함수가 클래스의 멤버 인 경우 "멤버 함수에 대한 포인터"를 사용해보십시오.

0

.

  1. 함수 포인터, 당신이 보여주고 함수를

구문을 적응하기 위해 C++ TR1의 일부와 C++ 11

  • 사용 펑하고 std::ptr_fun 인 C 스타일의 방법
  • std::function C++ 11에서만 작동합니다. 이전의 C++ 버전은 익명의 함수를 정의 할 수있는 가능성을 제공하지 않습니다.

  • +0

    구문을 사용하지 않고 방금 발명했습니다. '*'와'**'는 (만약 내가 C++ 11을 가지고 있다면) 대체 될 것이 무엇입니까? – Shoe

    관련 문제