COIN-OR::LEMON - Graph Library

Changeset 1141:e5ee2726abe4 in lemon-0.x for doc


Ignore:
Timestamp:
02/07/05 18:35:25 (19 years ago)
Author:
Hegyi Péter
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1540
Message:

This is not ready yet, but I have to go home...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/named-param.dox

    r955 r1141  
    55\section named-func-param Named "Function" Parameters
    66
     7C++ makes it possible to use default parameter values when calling a function. In such
     8a case we do not have to give value for parameters, the program will use the default ones.
     9Unfortunately sometimes this is not enough. If we do not want to give values for all the parameters, only
     10for some of them we come across problems, because an arbitrary set of parameters cannot be omitted. On the other hand parameters have a fixed order in the head of the function.
     11C++ can apply the default values only in the back of the order, if we do not give other value for them.
     12So we can not give the function for example the value of the first, and the third parameter, expecting that the program will aplly the default value for the second parameter.
     13However sometimes we would like to use some functinos exactly in this way. With a crafty trick and with some little inconvenience this is possible. We have implemented this little trick as an example below.
     14
     15\code
     16class named_fn
     17{
     18  int _id;
     19  double _val;
     20  int _dim;
     21 
     22  public:
     23  named_fn() : _id(0), _val(1), _dim(2) {}
     24  named_fn& id(int p)     { _id  = p ; return *this; }
     25  named_fn& val(double p) { _val = p ; return *this; }
     26  named_fn& dim(int p)    { _dim = p ; return *this; }
     27
     28  run() {
     29    printf("Here is the function itself.");
     30  }
     31};
     32\endcode
     33
     34
     35The usage is the following.
     36
     37We have to define a class, let's call it named_fn.
     38Let us assume that we would like to use a parameter, called X. In the named_fn class we have to define an _X attribute, and an X function. The function expects a parameter with the type of _X, and sets the value of _X. After setting the value the function returns the class itself. The class also have to have a function, called for example run(), we have to implement here the original function itself. The constructor of the class have to give all the attributes like _X the default values of them.
     39
     40If we instantiate this class, the default values will be set for the attributes (originally the parameters), initially. If we call the X function, we get a class with the modified parameter value of X. Therefore we can modify any parameter-value, independent from the order. To run the algorithm we have to call the run() function at the end of the row.
     41
     42Example: named_fn().id(3).val(2).run();
    743
    844\section traits-classes Traits Classes
    945
     46The procedure above can also be applied when defining classes. In this case the type of the attributes can be changed.
     47Initially we have to define a class with the default attribute types. This is the se called Traits Class. Later on
     48the types of these attributes can be changed, as described below. In our software \ref DijkstraDefaultTraits is an example of how a traits class look like.
     49
    1050\section named-templ-param Named Class Template Parameters
    1151
    12 Instead of creating a new traits class you can also use this adaptor class
    13 like this
     52If we would like to change the type of an attribute in a class that was instantiated by using a traits class as a template parameter, and the class contains named parameters, we do not have to reinstantiate the class with new traits class. Instead of that adaptor classes can be used like in the following cases.
     53
    1454\code
    1555Dijkstra<>::SetPredNodeMap<NullMap<Node,Node> >
    1656\endcode
     57
    1758It can also be used in conjunction with other named template
    1859parameters in arbitrary order.
     60
    1961\code
    2062Dijkstra<>::SetDistMap<MyMap>::SetPredMap<NullMap<Node,Edge> >
    2163\endcode
    2264
     65The result will be an instantiated Dijkstra class, in which the DistMap and the PredMap is modified.
     66
    2367\section named-templ-func-param Named "Function" Template Parameters
    2468
     69If the class has so called wizard functions, the new class with the modified tpye of attributes can be returned
     70by the appropriate wizard function. The usage of these wizard functions is the following:
    2571
    2672*/
Note: See TracChangeset for help on using the changeset viewer.