2014-11-24 7 views
0

함수 포인터를 사용하지 않고 다른 함수에 인수로 동일한 입력 인수/반환 유형의 함수를 전달하는 올바른 방법은 무엇입니까? 호출 할 때 전달 된 함수 인수를 인라인 된 싶습니다? 글쎄, 나는 단지 포인터 간접 지정을 원하지 않는다.함수 포인터/인라인없이 인수로 C++ 함수 전달?

Pass a function as an explicit template parameter

하지만 함수 포인터를 사용하고있는 것으로 보인다

나는이 발견했다.

편집 : 각 함수 인수에 대한 동작을 저장하기 위해 구조체를 작성하지 않아도됩니다.

struct X { 
    inline void operator()() // inline function 
    { 
    } 
}; 

template<typename F> void caller2(F functor) { 
    functor(); // inline call 
} 

: 당신은 인라인 함수의 제어가있는 경우

void inlined_function() {}; // function you want to pass 

template<typename F> void caller1() { 
    inlined_function(); // not passed through pointer, call inline 
} 

이 펑터로 구현 : 당신은 컴파일 시간에 전문화를 알고 있다면

답변

1

, 당신은 단지 전달하는 유형의 정보가 필요 두 가지 변형에 대한 클라이언트 코드 :

caller1<inlined_function>(); 
caller2(X{}); 

편집 :

functor를 구조체로 쓸 수있는 권한이 없으면 인라인 구조체 래퍼를 작성하십시오.

예 : void inlined_function() {};이며, caller2을 작성해야합니다.

template<typename F> void caller2(F functor) { 
    functor(); // inline call 
} 

caller2([](){ inlined_functor(); }); 
+0

이봐, 당신의 편집 아이디어를 좋아하고이 경우, (더 좋은) inlined_function를 호출하거나 X 유사한 펑, 람다 물품. 그래서 inlined_functor()는 inlined_functor2()를 가질 수 있으며, 이들은 여전히 ​​동일한 클래스에서 일반적인 메소드가 될 것입니다. – user997112

+0

@ user997112 - 예. 서로 호출하는 인라인 된 함수는 인라인 작업을합니다. – utnapistim

관련 문제