aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
templateStrategy.h
Go to the documentation of this file.
1 /**
2  *
3  * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4  * info_at_agrum_dot_org
5  *
6  * This library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library. If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 /**
23  * @file
24  * @brief Template trick for efficient development
25  *
26  * @author Pierre-Henri WUILLEMIN(@LIP6) and Jean-Christophe MAGNAN and Christophe
27  * GONZALES(@AMU)
28  */
29 
30 #ifndef GUM_TEMPLATE_STRATEGY_H
31 #define GUM_TEMPLATE_STRATEGY_H
32 
33 namespace gum {
34 
35  template < int v >
36  struct Int2Type {
37  enum
38  { value = v };
39  };
40 
41  enum TESTNAME
42  {
43  GTEST = 1,
44  CHI2TEST = 2,
46  };
47  template < TESTNAME, class A, class B, class C >
48  struct TestSelect {
49  typedef A type;
50  };
51  template < class A, class B, class C >
52  struct TestSelect< CHI2TEST, A, B, C > {
53  typedef B type;
54  };
55  template < class A, class B, class C >
56  struct TestSelect< LEASTSQUARETEST, A, B, C > {
57  typedef C type;
58  };
59 
60  template < bool, class A, class B >
61  struct ValueSelect {
62  typedef A type;
63  };
64  template < class A, class B >
65  struct ValueSelect< false, A, B > {
66  typedef B type;
67  };
68 
70  {
73  };
74  template < LEARNERNAME, class A, class B >
75  struct LearnerSelect {
76  typedef A type;
77  };
78  template < class A, class B >
79  struct LearnerSelect< ITILEARNER, A, B > {
80  typedef B type;
81  };
82 
83 } // end of namespace gum
84 
85 #endif // GUM_TEMPLATE_STRATEGY_H
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643