# 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 |