# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1222013387 -7200
# Node ID f5965bbf13538cce384305a3c0a5e6da091de807
# Parent 986d30f5c1c0c39a7eb2953a2b216e245410beaa
Improvements in named-param.dox (ticket #147)
diff --git a/doc/named-param.dox b/doc/named-param.dox
|
a
|
b
|
|
| 1 | | /* -*- C++ -*- |
| | 1 | /* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 | * |
| 3 | | * This file is a part of LEMON, a generic C++ optimization library |
| | 3 | * This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 | * |
| 5 | 5 | * Copyright (C) 2003-2008 |
| 6 | 6 | * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| … |
… |
|
| 25 | 25 | Several modern languages provide a convenient way to refer the |
| 26 | 26 | function parameters by name also when you call the function. It is |
| 27 | 27 | especially comfortable in case of a function having tons of parameters |
| 28 | | with natural default values. Sadly, C++ lack this amenity. |
| | 28 | with natural default values. Sadly, C++ lack this amenity. |
| 29 | 29 | |
| 30 | 30 | However, with a crafty trick and with some little |
| 31 | 31 | inconvenience, it is possible to emulate is. |
| 32 | 32 | The example below shows how to do it. |
| 33 | 33 | |
| 34 | 34 | \code |
| 35 | | class namedFn |
| | 35 | class namedFn |
| 36 | 36 | { |
| 37 | 37 | int _id; |
| 38 | 38 | double _val; |
| 39 | 39 | int _dim; |
| 40 | | |
| | 40 | |
| 41 | 41 | public: |
| 42 | 42 | namedFn() : _id(0), _val(1), _dim(2) {} |
| 43 | 43 | namedFn& id(int p) { _id = p ; return *this; } |
| … |
… |
|
| 45 | 45 | namedFn& dim(int p) { _dim = p ; return *this; } |
| 46 | 46 | |
| 47 | 47 | run() { |
| 48 | | std::cout << "Here comes the function itself\n" << |
| 49 | | << "With parameters " |
| 50 | | << _id << ", " << _val << ", " << _dim << std::endl; |
| | 48 | std::cout << "Here comes the function itself\n" << |
| | 49 | << "With parameters " |
| | 50 | << _id << ", " << _val << ", " << _dim << std::endl; |
| 51 | 51 | } |
| 52 | 52 | }; |
| 53 | 53 | \endcode |
| … |
… |
|
| 76 | 76 | |
| 77 | 77 | \section named-templ-func-param Named Function Template Parameters |
| 78 | 78 | |
| 79 | | A named parameter can also be a template functions. The usage is |
| | 79 | A named parameter can also be a template function. The usage is |
| 80 | 80 | exactly the same, but the implementation behind is a kind of black |
| 81 | 81 | magic and they are the dirtiest part of the LEMON code. |
| 82 | 82 | |
| … |
… |
|
| 103 | 103 | be used as shown in the following example. |
| 104 | 104 | |
| 105 | 105 | \code |
| 106 | | Dijkstra<>::SetPredNodeMap<NullMap<Node,Node> >::Create |
| | 106 | Dijkstra<>::SetPredMap<NullMap<Node,Arc> >::Create |
| 107 | 107 | \endcode |
| 108 | 108 | |
| 109 | 109 | It can also be used in conjunction with other named template |
| 110 | 110 | parameters in arbitrary order. |
| 111 | 111 | |
| 112 | 112 | \code |
| 113 | | Dijkstra<>::SetDistMap<MyMap>::SetPredMap<NullMap<Node,Edge> >::Create |
| | 113 | Dijkstra<>::SetDistMap<MyMap>::SetPredMap<NullMap<Node,Arc> >::Create |
| 114 | 114 | \endcode |
| 115 | 115 | |
| 116 | 116 | The result will be an instantiated Dijkstra class, in which the |