---
name: "lc"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "2.08.01-1"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/lc/3bobcat"
---

# lc(3bobcat)

Geneneric Local Context Struct for context wrappers

## NAME

FBB::LC - Geneneric Local Context Struct for context wrappers

## SYNOPSIS

**#include \<bobcat/lc\>**\

## DESCRIPTION

The template struct *FBB::LC* can be used to declare and define a *local context struct* as used with the Bobcat classes *FnWrap1c* and *FnWrap2c*.

These latter two classes are normally used in combination with generic (STL) algorithms to process data made available by the generic algorithms in combination with information that may be available locally, as in a function. Local information could consist of, e.g., local variables or parameters defined for a function.

The functions that are passed to the local context wrappers *FnWrap1c* and *FnWrap2c* therefore require the specification of the data types made available by the generic algorithms as well as the declaration and definition of a *local context struct* that is passed to those functions by the local context wrappers. This in turn requires the definition of the local context structs as nested structs in classes declaring such functions. Although this is perfectly possible, it complicates those classes to some extent and requires the class designer to define struct type names for the local context structs, although those type names are irrelevant in practice.

The *LC* template struct can be used to declare and define local context structs \`on the spot’ without requiring the class designer to add struct definition to the class at hand. To use the *LC* template struct the types of the various fields of the local context structs are specified at the template’s declaration and definition and its fields are accessed through standardized field names. The first field becomes *f1*, the second field *f2*, until the last field (e.g., *f12*).

Clearly there is a drawback in using standardized names: the association between field name and its semantics is lost. It is a matter of taste whether this is considered a severe enough drawback to avoid using the *LC* template struct. But then: it is still possible to add fully defined local context structs to a class if this is preferred over using the *LC* template structs.

When using the *LC* local context struct generating template the types need to be specified in various locations: when the template is declared, when it is defined and when the context wrapper template is instantiated. This again could be considered a drawback reducing its usefulness. However, this latter drawback is easily overcome by using a *typedef* to associate a type name with a particular *LC* template configuration.

The distributed *LC* template struct allows for the definition of local context structs having at most 10 fields. Local context structs requiring more than 10 fields are seldom seen. Should the need for such a local context structs arise then a solution is readily available. With the **Bobcat** library a program [**bobcatlcgen**(1)](/bobcatlcgen/1.md) is distributed that can be used to recreate the **\<bobcat/lc\>** file (either locally or system-wide) allowing the use of a larger number of template type parameters than the default number of 10.

The example section shows how a *LC* local context struct can be used *in lieu of* an explicitly defined local context struct.

## NAMESPACE

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

## INHERITS FROM

\-

## CONSTRUCTORS

- o

  **LC\<typelist\>(initialization values)**:\
   The standard copy constructor is available.

## MEMBER FUNCTIONS

There are no member functions defined. As the template generates a struct rather than a class all its members are immediately available to its users.

## EXAMPLE

```
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <bobcat/fnwrap1c>
#include <bobcat/lc>
using namespace std;
using namespace FBB;
class Strings
{
    typedef LC<size_t, ostream &> lc;
    vector<string> d_vs;
    public:
        Strings()
        {
            d_vs.push_back("one");
            d_vs.push_back("two");
            d_vs.push_back("");
            d_vs.push_back("three");
        }
        void display(ostream &out) const
        {
            lc c(1, out);
            find_if(d_vs.begin(), d_vs.end(),
                FnWrap1c<string const &, lc &, bool>
                     (&Strings::untilEmpty, c));
        }
    private:
        static bool untilEmpty(string const &str, lc &c)
        {
            if (str.empty())
                return true;        // stop
            c.f2 << c.f1++ << " " << str << endl;
            return false;           // don’t stop
        }
};
int main()
{
    Strings s;
    s.display(cout);
}
```

## FILES

*bobcat/lc* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md),  [**bobcatlcgen**(1)](/bobcatlcgen/1.md), [**fnwrap1c**(3bobcat)](/fnwrap1c/3bobcat.md), [**fnwrap2c**(3bobcat)](/fnwrap2c/3bobcat.md)

## BUGS

None Reported.

## DISTRIBUTION FILES

- o

  *bobcat\_2.08.01-x.dsc*: detached signature;

- o

  *bobcat\_2.08.01-x.tar.gz*: source archive;

- o

  *bobcat\_2.08.01-x\_i386.changes*: change log;

- o

  *libbobcat1\_2.08.01-x\_\*.deb*: debian package holding the libraries;

- o

  *libbobcat1-dev\_2.08.01-x\_\*.deb*: debian package holding the libraries, headers and manual pages;

- o

  *http://sourceforge.net/projects/bobcat*: public archive location;

## 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**).
