functional (STL/CLR)

Include the STL/CLR header <cliext/functional> to define the a number of template classes and related template delegates and functions.

Syntax

#include <functional>

Requirements

Header: <cliext/functional>

Namespace: cliext

Declarations

Delegate Description
binary_delegate (STL/CLR) Two-argument delegate.
binary_delegate_noreturn (STL/CLR) Two-argument delegate returning void.
unary_delegate (STL/CLR) One-argument delegate.
unary_delegate_noreturn (STL/CLR) One-argument delegate returning void.
Class Description
binary_negate (STL/CLR) Functor to negate a two-argument functor.
binder1st (STL/CLR) Functor to bind first argument to a two-argument functor.
binder2nd (STL/CLR) Functor to bind second argument to a two-argument functor.
divides (STL/CLR) Divide functor.
equal_to (STL/CLR) Equal comparison functor.
greater (STL/CLR) Greater comparison functor.
greater_equal (STL/CLR) Greater or equal comparison functor.
less (STL/CLR) Less comparison functor.
less_equal (STL/CLR) Less or equal comparison functor.
logical_and (STL/CLR) Logical AND functor.
logical_not (STL/CLR) Logical NOT functor.
logical_or (STL/CLR) Logical OR functor.
minus (STL/CLR) Subtract functor.
modulus (STL/CLR) Modulus functor.
multiplies (STL/CLR) Multiply functor.
negate (STL/CLR) Functor to return its argument negated.
not_equal_to (STL/CLR) Not equal comparison functor.
plus (STL/CLR) Add functor.
unary_negate (STL/CLR) Functor to negate a one-argument functor.
Function Description
bind1st (STL/CLR) Generates a binder1st for an argument and functor.
bind2nd (STL/CLR) Generates a binder2nd for an argument and functor.
not1 (STL/CLR) Generates a unary_negate for a functor.
not2 (STL/CLR) Generates a binary_negate for a functor.

Members

binary_delegate (STL/CLR)

The genereic class describes a two-argument delegate. You use it specify a delegate in terms of its argument and return types.

Syntax

generic<typename Arg1,
    typename Arg2,
    typename Result>
    delegate Result binary_delegate(Arg1, Arg2);

Parameters

Arg1
The type of the first argument.

Arg2
The type of the second argument.

Result
The return type.

Remarks

The genereic delegate describes a two-argument function.

Note that for:

binary_delegate<int, int, int> Fun1;

binary_delegate<int, int, int> Fun2;

the types Fun1 and Fun2 are synonyms, while for:

delegate int Fun1(int, int);

delegate int Fun2(int, int);

they are not the same type.

Example

// cliext_binary_delegate.cpp
// compile with: /clr
#include <cliext/functional>

bool key_compare(wchar_t left, wchar_t right)
    {
    return (left < right);
    }

typedef cliext::binary_delegate<wchar_t, wchar_t, bool> Mydelegate;
int main()
    {
    Mydelegate^ kcomp = gcnew Mydelegate(&key_compare);

    System::Console::WriteLine("compare(L'a', L'a') = {0}",
        kcomp(L'a', L'a'));
    System::Console::WriteLine("compare(L'a', L'b') = {0}",
        kcomp(L'a', L'b'));
    System::Console::WriteLine("compare(L'b', L'a') = {0}",
        kcomp(L'b', L'a'));
    System::Console::WriteLine();
    return (0);
    }
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False

binary_delegate_noreturn (STL/CLR)

The genereic class describes a two-argument delegate that returns void. You use it specify a delegate in terms of its argument.

Syntax

generic<typename Arg1,
    typename Arg2>
    delegate void binary_delegate(Arg1, Arg2);

Parameters

Arg1
The type of the first argument.

Arg2
The type of the second argument.

Remarks

The genereic delegate describes a two-argument function that returns void.

Note that for:

binary_delegate_noreturn<int, int> Fun1;

binary_delegate_noreturn<int, int> Fun2;

the types Fun1 and Fun2 are synonyms, while for:

delegate void Fun1(int, int);

delegate void Fun2(int, int);

they are not the same type.

Example

// cliext_binary_delegate_noreturn.cpp
// compile with: /clr
#include <cliext/functional>

void key_compare(wchar_t left, wchar_t right)
    {
    System::Console::WriteLine("compare({0}, {1}) = {2}",
        left, right, left < right);
    }

typedef cliext::binary_delegate_noreturn<wchar_t, wchar_t> Mydelegate;
int main()
    {
    Mydelegate^ kcomp = gcnew Mydelegate(&key_compare);

    kcomp(L'a', L'a');
    kcomp(L'a', L'b');
    kcomp(L'b', L'a');
    System::Console::WriteLine();
    return (0);
    }
compare(a, a) = False
compare(a, b) = True
compare(b, a) = False

binary_negate (STL/CLR)

The template class describes a functor that, when called, returns the logical NOT of its stored two-argument functor. You use it specify a function object in terms of its stored functor.

Syntax

template<typename Fun>
    ref class binary_negate
    { // wrap operator()
public:
    typedef Fun stored_function_type;
    typedef typename Fun::first_argument_type first_argument_type;
    typedef typename Fun::second_argument_type second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    explicit binary_negate(Fun% functor);
    binary_negate(binary_negate<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Fun
The type of the stored functor.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
stored_function_type The type of the functor.
Member Description
binary_negate Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^() Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor that stores another two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the logical NOT of the stored functor called with the two arguments.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_binary_negate.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(4);
    c2.push_back(4);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 4 4"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::less<int> less_op;

    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(),
        cliext::binary_negate<cliext::less<int> >(less_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::not2(less_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
4 4
1 0
1 0

bind1st (STL/CLR)

Generates a binder1st for an argument and functor.

Syntax

template<typename Fun,
    typename Arg>
    binder1st<Fun> bind1st(Fun% functor,
        Arg left);

Template Parameters

Arg
The type of the argument.

Fun
The type of the functor.

Function Parameters

functor
The functor to wrap.

left
The first argument to wrap.

Remarks

The template function returns binder1st (STL/CLR)<Fun>(functor, left). You use it as a convenient way to wrap a two-argument functor and its first argument in a one-argument functor that calls it with a second argument.

Example

// cliext_bind1st.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c3(2, 0);

// display initial contents " 4 3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::minus<int> sub_op;
    cliext::binder1st<cliext::minus<int> > subfrom3(sub_op, 3);

    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        subfrom3);
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        bind1st(sub_op, 3));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
-1 0
-1 0

bind2nd (STL/CLR)

Generates a binder2nd for an argument and functor.

Syntax

template<typename Fun,
    typename Arg>
    binder2nd<Fun> bind2nd(Fun% functor,
        Arg right);

Template Parameters

Arg
The type of the argument.

Fun
The type of the functor.

Function Parameters

functor
The functor to wrap.

right
The second argument to wrap.

Remarks

The template function returns binder2nd (STL/CLR)<Fun>(functor, right). You use it as a convenient way to wrap a two-argument functor and its second argument in a one-argument functor that calls it with a first argument.

Example

// cliext_bind2nd.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c3(2, 0);

// display initial contents " 4 3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::minus<int> sub_op;
    cliext::binder2nd<cliext::minus<int> > sub4(sub_op, 4);

    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        sub4);
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        bind2nd(sub_op, 4));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
0 -1
0 -1

binder1st (STL/CLR)

The template class describes a one-argument functor that, when called, returns its stored two-argument functor called with its stored first argument and the supplied second argument. You use it specify a function object in terms of its stored functor.

Syntax

template<typename Fun>
    ref class binder1st
    { // wrap operator()
public:
    typedef Fun stored_function_type;
    typedef typename Fun::first_argument_type first_argument_type;
    typedef typename Fun::second_argument_type second_argument_type;
    typedef typename Fun:result_type result_type;
    typedef Microsoft::VisualC::StlClr::UnaryDelegate<
        second_argument_type, result_type>
        delegate_type;

    binder1st(Fun% functor, first_argument_type left);
    binder1st(binder1st<Arg>% right);

    result_type operator()(second_argument_type right);
    operator delegate_type^();
    };

Parameters

Fun
The type of the stored functor.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
stored_function_type The type of the functor.
Member Description
binder1st Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^() Casts the functor to a delegate.

Remarks

The template class describes a one-argument functor that stores a two-argument functor and a first argument. It defines the member operator operator() so that, when the object is called as a function, it returns the result of calling the stored functor with the stored first argument and the supplied second argument.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_binder1st.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c3(2, 0);

// display initial contents " 4 3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::minus<int> sub_op;
    cliext::binder1st<cliext::minus<int> > subfrom3(sub_op, 3);

    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        subfrom3);
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        bind1st(sub_op, 3));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
-1 0
-1 0

binder2nd (STL/CLR)

The template class describes a one-argument functor that, when called, returns its stored two-argument functor called with the supplied first argument and its stored second argument. You use it specify a function object in terms of its stored functor.

Syntax

template<typename Fun>
    ref class binder2nd
    { // wrap operator()
public:
    typedef Fun stored_function_type;
    typedef typename Fun::first_argument_type first_argument_type;
    typedef typename Fun::second_argument_type second_argument_type;
    typedef typename Fun:result_type result_type;
    typedef Microsoft::VisualC::StlClr::UnaryDelegate<
        first_argument_type, result_type>
        delegate_type;

    binder2nd(Fun% functor, second_argument_type left);
    binder2nd(binder2nd<Arg>% right);

    result_type operator()(first_argument_type right);
    operator delegate_type^();
    };

Parameters

Fun
The type of the stored functor.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
stored_function_type The type of the functor.
Member Description
binder2nd Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^() Casts the functor to a delegate.

Remarks

The template class describes a one-argument functor that stores a two-argument functor and a second argument. It defines the member operator operator() so that, when the object is called as a function, it returns the result of calling the stored functor with the supplied first argument and the stored second argument.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_binder2nd.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c3(2, 0);

// display initial contents " 4 3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::minus<int> sub_op;
    cliext::binder2nd<cliext::minus<int> > sub4(sub_op, 4);

    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        sub4);
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        bind2nd(sub_op, 4));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
0 -1
0 -1

divides (STL/CLR)

The template class describes a functor that, when called, returns the first argument divided by the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class divides
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef Arg result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    divides();
    divides(divides<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments and return value.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
divides Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^() Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the first argument divided by the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_divides.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(2);
    c2.push_back(1);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 2 1"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::divides<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
2 1
2 3

equal_to (STL/CLR)

The template class describes a functor that, when called, returns true only if the first argument is equal to the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class equal_to
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    equal_to();
    equal_to(equal_to<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
equal_to Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^() Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if the first argument is equal to the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_equal_to.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(4);
    c2.push_back(4);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 4 4"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::equal_to<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
4 4
1 0

greater (STL/CLR)

The template class describes a functor that, when called, returns true only if the first argument is greater than the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class greater
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    greater();
    greater(greater<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
greater Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if the first argument is greater than the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_greater.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(3);
    c2.push_back(3);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 3 3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::greater<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
3 3
1 0

greater_equal (STL/CLR)

The template class describes a functor that, when called, returns true only if the first argument is greater than or equal to the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class greater_equal
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    greater_equal();
    greater_equal(greater_equal<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
greater_equal Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if the first argument is greater than or equal to the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_greater_equal.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(4);
    c2.push_back(4);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 4 4"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::greater_equal<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
4 4
1 0

less (STL/CLR)

The template class describes a functor that, when called, returns true only if the first argument is less than the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class less
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    less();
    less(less<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
less Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if the first argument is less than the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_less.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(4);
    c2.push_back(4);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 4 4"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::less<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
4 4
0 1

less_equal (STL/CLR)

The template class describes a functor that, when called, returns true only if the first argument is less than or equal to the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class less_equal
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    less_equal();
    less_equal(less_equal<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
less_equal Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if the first argument is less than or equal to the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_less_equal.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(3);
    c2.push_back(3);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 3 3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::less_equal<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
3 3
0 1

logical_and (STL/CLR)

The template class describes a functor that, when called, returns true only if both the first argument and the second test as true. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class logical_and
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    logical_and();
    logical_and(logical_and<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
logical_and Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if both the first argument and the second test as true.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_logical_and.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(2);
    c1.push_back(0);
    Myvector c2;
    c2.push_back(3);
    c2.push_back(0);
    Myvector c3(2, 0);

// display initial contents " 1 0" and " 1 0"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::logical_and<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
2 0
3 0
1 0

logical_not (STL/CLR)

The template class describes a functor that, when called, returns true only if either its argument tests as false. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class logical_not
    { // wrap operator()
public:
    typedef Arg argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::UnaryDelegate<
        argument_type, result_type>
        delegate_type;

    logical_not();
    logical_not(logical_not<Arg> %right);

    result_type operator()(argument_type left);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
argument_type The type of the functor argument.
delegate_type The type of the generic delegate.
result_type The type of the functor result.
Member Description
logical_not Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a one-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if its argument tests as false.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_logical_not.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(0);
    Myvector c3(2, 0);

// display initial contents " 4 0"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c3.begin(), cliext::logical_not<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 0
0 1

logical_or (STL/CLR)

The template class describes a functor that, when called, returns true only if either the first argument or the second tests as true. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class logical_or
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    logical_or();
    logical_or(logical_or<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
logical_or Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if either the first argument or the second tests as true.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_logical_or.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(2);
    c1.push_back(0);
    Myvector c2;
    c2.push_back(0);
    c2.push_back(0);
    Myvector c3(2, 0);

// display initial contents " 2 0" and " 0 0"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::logical_or<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
2 0
0 0
1 0

minus (STL/CLR)

The template class describes a functor that, when called, returns the first argument minus the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class minus
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef Arg result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    minus();
    minus(minus<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments and return value.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
minus Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the first argument minus the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_minus.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(2);
    c2.push_back(1);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 2 1"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::minus<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
2 1
2 2

modulus (STL/CLR)

The template class describes a functor that, when called, returns the first argument modulo the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class modulus
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef Arg result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    modulus();
    modulus(modulus<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments and return value.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
modulus Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the first argument modulo the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_modulus.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(2);
    Myvector c2;
    c2.push_back(3);
    c2.push_back(1);
    Myvector c3(2, 0);

// display initial contents " 4 2" and " 3 1"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::modulus<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 2
3 1
1 0

multiplies (STL/CLR)

The template class describes a functor that, when called, returns the first argument times the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class multiplies
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef Arg result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    multiplies();
    multiplies(multiplies<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments and return value.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
multiplies Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the first argument times the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_multiplies.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(2);
    c2.push_back(1);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 2 1"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::multiplies<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
2 1
8 3

negate (STL/CLR)

The template class describes a functor that, when called, returns its argument negated. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class negate
    { // wrap operator()
public:
    typedef Arg argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::UnaryDelegate<
        argument_type, result_type>
        delegate_type;

    negate();
    negate(negate<Arg>% right);

    result_type operator()(argument_type left);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
argument_type The type of the functor argument.
delegate_type The type of the generic delegate.
result_type The type of the functor result.
Member Description
negate Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a one-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns its argument negated.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_negate.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(-3);
    Myvector c3(2, 0);

// display initial contents " 4 -3"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c3.begin(), cliext::negate<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 -3
-4 3

not_equal_to (STL/CLR)

The template class describes a functor that, when called, returns true only if the first argument is not equal to the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class not_equal_to
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    not_equal_to();
    not_equal_to(not_equal_to<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
not_equal_to Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns true only if the first argument is not equal to the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_not_equal_to.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(4);
    c2.push_back(4);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 4 4"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::not_equal_to<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
4 4
0 1

not1 (STL/CLR)

Generates a unary_negate for a functor.

Syntax

template<typename Fun>
    unary_negate<Fun> not1(Fun% functor);

Template Parameters

Fun
The type of the functor.

Function Parameters

functor
The functor to wrap.

Remarks

The template function returns unary_negate (STL/CLR)<Fun>(functor). You use it as a convenient way to wrap a one-argument functor in a functor that delivers its logical NOT.

Example

// cliext_not1.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(0);
    Myvector c3(2, 0);

// display initial contents " 4 0"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::logical_not<int> not_op;

    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        cliext::unary_negate<cliext::logical_not<int> >(not_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        cliext::not1(not_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 0
1 0
1 0

not2 (STL/CLR)

Generates a binary_negate for a functor.

Syntax

template<typename Fun>
    binary_negate<Fun> not2(Fun% functor);

Template Parameters

Fun
The type of the functor.

Function Parameters

functor
The functor to wrap.

Remarks

The template function returns binary_negate (STL/CLR)<Fun>(functor). You use it as a convenient way to wrap a two-argument functor in a functor that delivers its logical NOT.

Example

// cliext_not2.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(4);
    c2.push_back(4);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 4 4"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::less<int> less_op;

    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(),
        cliext::binary_negate<cliext::less<int> >(less_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::not2(less_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
4 4
1 0
1 0

plus (STL/CLR)

The template class describes a functor that, when called, returns the first argument plus the second. You use it specify a function object in terms of its argument type.

Syntax

template<typename Arg>
    ref class plus
    { // wrap operator()
public:
    typedef Arg first_argument_type;
    typedef Arg second_argument_type;
    typedef Arg result_type;
    typedef Microsoft::VisualC::StlClr::BinaryDelegate<
        first_argument_type, second_argument_type, result_type>
        delegate_type;

    plus();
    plus(plus<Arg>% right);

    result_type operator()(first_argument_type left,
        second_argument_type right);
    operator delegate_type^();
    };

Parameters

Arg
The type of the arguments and return value.

Member Functions

Type Definition Description
delegate_type The type of the generic delegate.
first_argument_type The type of the functor first argument.
result_type The type of the functor result.
second_argument_type The type of the functor second argument.
Member Description
plus Constructs the functor.
Operator Description
operator() Computes the desired function.
operator delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a two-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the first argument plus the second.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_plus.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(3);
    Myvector c2;
    c2.push_back(2);
    c2.push_back(1);
    Myvector c3(2, 0);

// display initial contents " 4 3" and " 2 1"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

    for each (int elem in c2)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::transform(c1.begin(), c1.begin() + 2,
        c2.begin(), c3.begin(), cliext::plus<int>());
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 3
2 1
6 4

unary_delegate (STL/CLR)

The genereic class describes a one-argument delegate. You use it specify a delegate in terms of its argument and return types.

Syntax

generic<typename Arg,
    typename Result>
    delegate Result unary_delegate(Arg);

Parameters

Arg
The type of the argument.

Result
The return type.

Remarks

The genereic delegate describes a one-argument function.

Note that for:

unary_delegare<int, int> Fun1;

unary_delegare<int, int> Fun2;

the types Fun1 and Fun2 are synonyms, while for:

delegate int Fun1(int);

delegate int Fun2(int);

they are not the same type.

Example

// cliext_unary_delegate.cpp
// compile with: /clr
#include <cliext/functional>

int hash_val(wchar_t val)
    {
    return ((val * 17 + 31) % 67);
    }

typedef cliext::unary_delegate<wchar_t, int> Mydelegate;
int main()
    {
    Mydelegate^ myhash = gcnew Mydelegate(&hash_val);

    System::Console::WriteLine("hash(L'a') = {0}", myhash(L'a'));
    System::Console::WriteLine("hash(L'b') = {0}", myhash(L'b'));
    return (0);
    }
hash(L'a') = 5
hash(L'b') = 22

unary_delegate_noreturn (STL/CLR)

The genereic class describes a one-argument delegate that returns void. You use it specify a delegate in terms of its argument type.

Syntax

generic<typename Arg>
    delegate void unary_delegate_noreturn(Arg);

Parameters

Arg
The type of the argument.

Remarks

The genereic delegate describes a one-argument function that returns void.

Note that for:

unary_delegare_noreturn<int> Fun1;

unary_delegare_noreturn<int> Fun2;

the types Fun1 and Fun2 are synonyms, while for:

delegate void Fun1(int);

delegate void Fun2(int);

they are not the same type.

Example

// cliext_unary_delegate_noreturn.cpp
// compile with: /clr
#include <cliext/functional>

void hash_val(wchar_t val)
    {
    System::Console::WriteLine("hash({0}) = {1}",
       val, (val * 17 + 31) % 67);
    }

typedef cliext::unary_delegate_noreturn<wchar_t> Mydelegate;
int main()
    {
    Mydelegate^ myhash = gcnew Mydelegate(&hash_val);

    myhash(L'a');
    myhash(L'b');
    return (0);
    }
hash(a) = 5
hash(b) = 22

unary_negate (STL/CLR)

The template class describes a functor that, when called, returns the logical NOT of its stored one-argument functor. You use it specify a function object in terms of its stored functor.

Syntax

template<typename Fun>
    ref class unary_negate
    { // wrap operator()
public:
    typedef Fun stored_function_type;
    typedef typename Fun::argument_type argument_type;
    typedef bool result_type;
    typedef Microsoft::VisualC::StlClr::UnaryDelegate<
        argument_type, result_type>
        delegate_type;

    unary_negate(Fun% functor);
    unary_negate(unary_negate<Fun>% right);

    result_type operator()(argument_type left);
    operator delegate_type^();
    };

Parameters

Fun
The type of the stored functor.

Member Functions

Type Definition Description
argument_type The type of the functor argument.
delegate_type The type of the generic delegate.
result_type The type of the functor result.
Member Description
unary_negate Constructs the functor.
Operator Description
operator() Computes the desired function.
delegate_type^ Casts the functor to a delegate.

Remarks

The template class describes a one-argument functor that stores another one-argument functor. It defines the member operator operator() so that, when the object is called as a function, it returns the logical NOT of the stored functor called with the argument.

You can also pass the object as a function argument whose type is delegate_type^ and it will be converted appropriately.

Example

// cliext_unary_negate.cpp
// compile with: /clr
#include <cliext/algorithm>
#include <cliext/functional>
#include <cliext/vector>

typedef cliext::vector<int> Myvector;
int main()
    {
    Myvector c1;
    c1.push_back(4);
    c1.push_back(0);
    Myvector c3(2, 0);

// display initial contents " 4 0"
    for each (int elem in c1)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display
    cliext::logical_not<int> not_op;

    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        cliext::unary_negate<cliext::logical_not<int> >(not_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();

// transform and display with function
    cliext::transform(c1.begin(), c1.begin() + 2, c3.begin(),
        cliext::not1(not_op));
    for each (int elem in c3)
        System::Console::Write(" {0}", elem);
    System::Console::WriteLine();
    return (0);
    }
4 0
1 0
1 0