2010-06-05 2 views
17

저는 이것이 구현하는데 2 초도 걸리지 않는 뭔가에 대한 우스꽝스러운 질문이라는 것을 알고 있습니다. 그러나 나는 새로운 표준이 도입되었다는 것을 모호하게 기억한다.C++ (0x)에 no-do "do nothing"함수 객체가 있습니까?

내가 grep'ed VC10의 헤더와 아무 것도 떠오른. 도울 수 있니? 그것은 나를 괴롭 히고있다! :)

편집 : 두 번째 생각에 , 나는 기억 된 새로운 펑 아마 관련이없는 std::default_deleter했다.

+3

AirMiles 포인트 어떤 폐기물 : 여기

struct VoidNoOp { void operator()() const { } template<class A> void operator()(A a) const { (void)(a); } template<class A, class B> void operator()(A a, B b) const { (void)(a); (void)(b); } template<class A, class B, class C> void operator()(A a, B b, C c) const { (void)(a); (void)(b); (void)(c); } }; 

파라미터의 임의의 숫자에 대한 C++ 11의 변화이다. CW 질문이 아니었다면 저축을 상상해보십시오! – wilhelmtell

답변

23

당신은 항상 무 조작 람다 작성할 수 []{}

+0

나는 이것을 좋아하지만'std :: conditional'의 숫자에 대해서는 작동하지 않는다 나는 흩어져있다. 그리고 빈'std :: function'은 operator()에 던져 질 것입니다. – dean

+1

'[] (...) {}'은 여러 입력 인자에 대해 작동합니다. – Mikhail

0

당신은 아마 신원 기능에 대해 생각했다 (표준 : 정체성과 분명히이 현재 초안에서 삭제된다)하지만 같은 일이 아닙니다.

+0

나는 '정체성'을 알고 있었지만 단항 적이라는 이유로 그것을 기각했다. 6 개월 전에 일반적인 default_deleter가 필요하다는 것을 기억합니다. – dean

1

어때?

// Return a noop function 
template <typename T> 
struct noop 
{ 
    T return_val; 

    noop (T retval = T()) 
     : return_val (retval) 
    { 
    } 

    T 
    operator (...) 
    { 
    return return_val; 
    } 
}; 

template <> 
struct noop<void> 
{ 
    void 
    operator (...) 
    { 
    } 
}; 

이것은 거의 모든 용도로 사용할 수 있습니다.

+0

작동하지 않기 때문에, non-trivially-copyable 유형을 noop에 대한 인수로 전달하려고 시도하는 경우 실패합니다. – rerx

0

아무 값도 반환하지 않는 functor를 예상하는 경우 드롭 인 no-op로 사용합니다.

struct VoidNoOp { 
    void operator()() const { }; 
    template<typename P1, typename... Params> 
    void operator()(P1 p1, Params... parameters) { 
     (void)(p1);    // we do this just to remove warnings -- requires the recursion 
     operator()(parameters...); 
    } 
};