FBB::FnWrap

libbobcat1-dev_2.21.00-x.tar.gz

2005-2012


FBB::FnWrap(3bobcat)

FBB::FnWrap(3bobcat)

libbobcat1-dev_2.21.00-x.tar.gz Configurable Function Wrapper

2005-2012

NAME

FnWrap - Generic configurable context function wrapper class

SYNOPSIS

#include <bobcat/fnwrap>

DESCRIPTION

The FBB::FnWrap class traditionally contains two static members: unary and binary. These functions are still available, but since Bobcat version 2.15.00 they have identical implementations and are in fact superseded by the new free function FBB::context (see below). All three functions return the appropriate (unary or binary) functor that is ordinarily called from generic algorithms of the standard template library, expecting a unary or binary functor or predicate.

In this description there's no further reference to FnWrap::unary and FnWrap::binary. Instead, FBB::context is referred to, usually as just context. Instead of context the functions FnWrap::unary or FnWrap::binary could be used as well. FnWrap::unary and FnWrap::binary will continue to be available in future versions of Bobcat.

The context function expects the name of a (static or free) function that is called by the functor's function operator. The arguments received by the functor's function operator are forwarded to this static or free function.

Any additional arguments that are passed to context are forwarded to the function called by the functor's function operator. This allows users of FnWrap to pass a local context to the function that is indirectly called by a generic algorithm.

The number and types of arguments are determined by the parameter list of the function specified as first argument of context. If that function, in addition to parameters matching the types of the arguments provided by the generic algorithm also defines, e.g., an int and a std::string & parameter, then context must be called with arguments being, respectively, the address of the function to call, an int argument and a std::string lvalue.

The type of the return value of the function that is passed to context also becomes the return type of the functor's function call operator. So if the generic algorithm expects a predicate function the function called by the functor's function call operator should return a bool value.

The called function must be a static member or free function. Using a static member or free function has several advantages over calling a non-static class member function:

NAMESPACE

FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace FBB.

INHERITS FROM

-

FREE FUNCTION

STATIC MEMBERS

TYPEDEFS

The functors defines types, that may be required by generic algorithms:

EXAMPLES


    // accumulating strings from a vector to one big string, using
    // `accumulate'
    #include <iostream>
    #include <numeric>
    #include <string>
    #include <vector>
    #include <bobcat/fnwrap>
    
    using namespace std;
    using namespace FBB;
    
    class Strings
    {
        vector<string> d_vs;
    
        public:
            Strings()
            :
                d_vs({"one", "two", "three"})
            {}
    
            void display(ostream &out) const
            {
                size_t count = 0;
    
                cout << "On Exit: " <<
                    accumulate(
                        d_vs.begin(), d_vs.end(),
                        string("HI"),
                        context(show, count, out)) << '\n';
                    
            }
    
        private:
            static string show(string const &str1,
                                    string const &str2,
                                    size_t &nr, ostream &out)
            {
                out << ++nr << " " << str1 << " " << str2 << '\n';

                return str1 + " " + str2;
            }
    };
    
    int main()
    {
        Strings s;
        s.display(cout);
    }
        
After compilation and linking, simply call the program without any arguments.

FILES

bobcat/fnwrap - defines the class interface

SEE ALSO

bobcat(7), foreach(3bobcat), repeat(3bobcat)

BUGS

None Reported.

DISTRIBUTION FILES

BOBCAT

Bobcat is an acronym of `Brokken's Own Base Classes And Templates'.

COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

Frank B. Brokken (f.b.brokken@rug.nl).