C++ 1x 표준은 더 보편적 인 std::bind
을 위해 이전 STL 바인더 함수를 사용하지 않습니다. 그러나 std::not1
및 std::not2
은 범용 std::not_
또는 무엇인가가 사용되지 않을 것으로 보입니다. 실제로, C++ 1x 이전의 STL의 <functional>
부분은 1) 람다 부족, 2) 바인더와 부정 펑터가 중첩 된 typedef를 필요로한다는 사실 (의미 : argument_type
)을 의미합니다. 3) 가변성 템플릿이 없기 때문에 인수의 수에 따라 바인더와 부정 함수가 별도로 필요했습니다.단항 및 이항 부정
C++ 1x가 모두 변경되어 유용성이 크게 향상되었습니다. <functional>
. 하지만 몇 가지 이유로 C++ 1x는 을 제외한 모든 것을 개선 한 것 같습니다.std::not1
및 std::not2
. 물론 기존의 바인더가 사용되지 않는 동일한 방식으로 std::not1
및 std::not2
을 중단 한 것
template <class F>
class negation
{
public:
negation(F f) : m_functor(f) { }
template <class... Args>
bool operator() (Args&&... args) const
{
return (!m_functor(args...));
}
private:
F m_functor;
};
template <class F>
inline negation<F> not_(F f)
{
return negation<F>(f);
}
이 : 정말,이 같은 표준 보편적 negate
기능이 좋을 것이다.
질문 : 1) C++ 1x 초안을 살펴본 결과 범용 negate
기능에 대한 언급이 없습니다. 나는 그것을 놓쳤는가? 2) 유니버설 bind
을 추가하고 이전 바인더를 사용하지 않는 몇 가지 이유가 있습니까?하지만 부정 기능에 대해 동일한 작업을 수행하지 못했습니다.
''도 유용합니다. 이제 람다가 있습니까? –
@Marcelo, 확실합니다. 'std :: bind'는 매우 유용합니다. – Channel72
어떻게 그렇게? @ Howard가 [DeadMG의 대답] (http://stackoverflow.com/questions/5567342/unary-and-binary-negation/5567712#5567712)에 대한 의견은 [another answer] (http://stackoverflow.com/questions/) 링크입니다. 1930903/bind-vs-lambda/4581747 # 4581747) bind를 주장합니다. 왜냐하면 lambdas는 타입 유추를하지 않기 때문입니다. 솔직하게, 그러나 그것은 나에게 정확하게 정반대의 것을 확신시킨다.명시 적 타입 사용하기 -'auto f = [] (const char * a, float b) {cout << a << ''<< b; };'- 성가신 그대로는 그 대답에 제시된 구속력있는 해결책보다 훨씬 낫습니다. 얼마나 자주 바인드가 우수한 솔루션을 제공한다고 생각하십니까? –