|  | <!-- | 
|  | Licensed to the Apache Software  Foundation (ASF) under one or more | 
|  | contributor  license agreements.  See  the NOTICE  file distributed | 
|  | with  this  work  for  additional information  regarding  copyright | 
|  | ownership.   The ASF  licenses this  file to  you under  the Apache | 
|  | License, Version  2.0 (the  License); you may  not use  this file | 
|  | except in  compliance with the License.   You may obtain  a copy of | 
|  | the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, software | 
|  | distributed under the  License is distributed on an  "AS IS" BASIS, | 
|  | WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or | 
|  | implied.   See  the License  for  the  specific language  governing | 
|  | permissions and limitations under the License. | 
|  |  | 
|  | Copyright 1999-2007 Rogue Wave Software, Inc. | 
|  | --> | 
|  |  | 
|  | <HTML> | 
|  | <HEAD> | 
|  | <TITLE>Negators</TITLE> | 
|  | <LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD> | 
|  | <BODY BGCOLOR=#FFFFFF> | 
|  | <A HREF="negate.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="new-h.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library Reference Guide</B></DIV> | 
|  | <H2>Negators</H2> | 
|  | <P><B>Library:</B>  <A HREF="2-4.html">General utilities</A></P><UL> | 
|  | <LI><A HREF="#sec1">Local Index</A></LI> | 
|  | <LI><A HREF="#sec2">Summary</A></LI> | 
|  | <LI><A HREF="#sec3">Synopsis</A></LI> | 
|  | <LI><A HREF="#sec4">Description</A></LI> | 
|  | <LI><A HREF="#sec5">Interface</A></LI> | 
|  | <LI><A HREF="#sec6">Example</A></LI> | 
|  | <LI><A HREF="#sec7">See Also</A></LI> | 
|  | <LI><A HREF="#sec8">Standards Conformance</A></LI> | 
|  | </UL> | 
|  | <A NAME="sec1"><H3>Local Index</H3></A> | 
|  | No Entries | 
|  | <A NAME="sec2"><H3>Summary</H3></A> | 
|  | <P>Function adaptors and function objects used to reverse the sense of predicate function objects</P> | 
|  | <A NAME="sec3"><H3>Synopsis</H3></A> | 
|  |  | 
|  | <PRE>#include <functional> | 
|  |  | 
|  | namespace std { | 
|  | template <class Predicate> | 
|  | class unary_negate; | 
|  |  | 
|  | template <class Predicate> | 
|  | unary_negate<Predicate> not1(const Predicate&); | 
|  |  | 
|  | template <class Predicate> | 
|  | class binary_negate; | 
|  |  | 
|  | template <class Predicate> | 
|  | binary_negate<Predicate> not2(const Predicate&); | 
|  | } | 
|  | </PRE> | 
|  | <A NAME="sec4"><H3>Description</H3></A> | 
|  | <P>Negators <SAMP><A HREF="not1.html">not1()</A></SAMP> and <SAMP><A HREF="not2.html">not2()</A></SAMP> are functions that take predicate function objects as arguments and return predicate function objects with the opposite sense. Negators work only with function objects defined as subclasses of the classes <B><I><A HREF="unary-function.html">unary_function</A></I></B> and <B><I><A HREF="binary-function.html">binary_function</A></I></B>. <SAMP>not1()</SAMP> accepts and returns unary predicate function objects. <SAMP>not2()</SAMP> accepts and returns binary predicate function objects.</P> | 
|  | <P><B><I><A HREF="unary-negate.html">unary_negate</A></I></B> and <B><I><A HREF="binary-negate.html">binary_negate</A></I></B> are function object classes that include return types for the negators, <SAMP><A HREF="not1.html">not1()</A></SAMP> and <SAMP><A HREF="not2.html">not2()</A></SAMP>.</P> | 
|  | <A NAME="sec5"><H3>Interface</H3></A> | 
|  |  | 
|  | <UL><PRE>namespace std { | 
|  |  | 
|  | template <class Predicate> | 
|  | class unary_negate | 
|  | : public unary_function | 
|  | <typename Predicate::argument_type, bool> { | 
|  |  | 
|  | public: | 
|  | explicit unary_negate (const Predicate&); | 
|  | bool operator() (const argument_type&) const; | 
|  | }; | 
|  |  | 
|  | template<class Predicate> | 
|  | unary_negate <Predicate> not1(const Predicate&); | 
|  | } | 
|  | template<class Predicate> | 
|  | class binary_negate | 
|  | : public binary_function | 
|  | <typename Predicate::first_argument_type, | 
|  | typename Predicate::second_argument_type, bool> | 
|  | { | 
|  | public: | 
|  | explicit binary_negate (const Predicate&); | 
|  | bool operator() (const first_argument_type&, | 
|  | const second_argument_type&) const; | 
|  | }; | 
|  |  | 
|  | template <class Predicate> | 
|  | binary_negate<Predicate> not2 (const Predicate&); | 
|  | </PRE></UL> | 
|  | <A NAME="sec6"><H3>Example</H3></A> | 
|  |  | 
|  | <UL><PRE>// | 
|  | //  negator.cpp | 
|  | // | 
|  |  | 
|  | #include <functional>   // for unary_function | 
|  | #include <iostream>     // for boolalpha, cout, endl | 
|  |  | 
|  |  | 
|  | // Create a new predicate from unary_function. | 
|  | template <class Arg> | 
|  | struct is_odd : public std::unary_function<Arg, bool> | 
|  | { | 
|  | bool operator() (const Arg &arg1) const { | 
|  | return arg1 % 2 != 0; | 
|  | } | 
|  | }; | 
|  |  | 
|  |  | 
|  | int main () | 
|  | { | 
|  | std::less<int> less_func; | 
|  |  | 
|  | // Use not2 on less. | 
|  | std::cout << std::boolalpha | 
|  | << less_func (1, 4) << '\n' | 
|  | << less_func (4, 1) << '\n' | 
|  | << std::not2 (std::less<int>())(1, 4) << '\n' | 
|  | << std::not2 (std::less<int>())(4, 1) << '\n'; | 
|  |  | 
|  | // Create an instance of our predicate. | 
|  | is_odd<int> odd; | 
|  |  | 
|  | // Use not1 on our user defined predicate. | 
|  | std::cout << odd (1) << '\n' | 
|  | << odd (4) << '\n' | 
|  | << std::not1 (odd)(1) << '\n' | 
|  | << std::not1 (odd)(4) << std::endl; | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  |  | 
|  | Program Output: | 
|  | </PRE></UL> | 
|  | <UL><PRE>true | 
|  | false | 
|  | false | 
|  | true | 
|  | true | 
|  | false | 
|  | false | 
|  | true | 
|  | </PRE></UL> | 
|  | <A NAME="sec7"><H3>See Also</H3></A> | 
|  | <P><A HREF="algorithms.html">Algorithms</A>, <B><I><A HREF="binary-function.html">binary_function</A></I></B>, <A HREF="functionobjects.html">Function Objects</A>, <B><I><A HREF="unary-function.html">unary_function</A></I></B></P> | 
|  | <A NAME="sec8"><H3>Standards Conformance</H3></A> | 
|  | <P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 20.3.5</I></P> | 
|  |  | 
|  | <BR> | 
|  | <HR> | 
|  | <A HREF="negate.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="new-h.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A> | 
|  |  | 
|  | <!-- Google Analytics tracking code --> | 
|  | <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> | 
|  | </script> | 
|  | <script type="text/javascript"> | 
|  | _uacct = "UA-1775151-1"; | 
|  | urchinTracker(); | 
|  | </script> | 
|  | <!-- end of Google Analytics tracking code --> | 
|  |  | 
|  | </BODY> | 
|  | </HTML> |