~ubuntu-branches/debian/sid/simpleitk/sid

« back to all changes in this revision

Viewing changes to Code/Common/include/sitkEnableIf.h

  • Committer: Package Import Robot
  • Author(s): Ghislain Antony Vaillant
  • Date: 2017-11-02 08:49:18 UTC
  • Revision ID: package-import@ubuntu.com-20171102084918-7hs09ih668xq87ej
Tags: upstream-1.0.1
ImportĀ upstreamĀ versionĀ 1.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*=========================================================================
 
2
*
 
3
*  Copyright Insight Software Consortium
 
4
*
 
5
*  Licensed under the Apache License, Version 2.0 (the "License");
 
6
*  you may not use this file except in compliance with the License.
 
7
*  You may obtain a copy of the License at
 
8
*
 
9
*         http://www.apache.org/licenses/LICENSE-2.0.txt
 
10
*
 
11
*  Unless required by applicable law or agreed to in writing, software
 
12
*  distributed under the License is distributed on an "AS IS" BASIS,
 
13
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
14
*  See the License for the specific language governing permissions and
 
15
*  limitations under the License.
 
16
*
 
17
*=========================================================================*/
 
18
#ifndef sitkEnableIf_h
 
19
#define sitkEnableIf_h
 
20
 
 
21
namespace itk
 
22
{
 
23
namespace simple
 
24
{
 
25
 
 
26
/* \brief This is an implementation of the enable if idiom.
 
27
 *
 
28
 * This template enables specialization of a templated function based
 
29
 * on some traits or concepts. It is implemented with SFINAE.
 
30
 *
 
31
 * If the parameter V is true then the Type trait is the second
 
32
 * template parameter, otherwise an implementation does not exist and
 
33
 * with SFIANE another implementation may be choosen.
 
34
 *
 
35
 * Example:
 
36
 * \code
 
37
 * template<class TImageType>
 
38
 * typename EnableIf<IsBasic<TImageType>::Value>::Type
 
39
 * AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth );
 
40
 *
 
41
 * template<class TImageType>
 
42
 * typename EnableIf<IsVector<TImageType>::Value>::Type
 
43
 * AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth );
 
44
 * \endcode
 
45
 *
 
46
 */
 
47
template <bool V, class T = void> struct EnableIf {};
 
48
/** \cond SPECIALIZATION_IMPLEMENTATION */
 
49
template <class T> struct EnableIf<true, T> { typedef T Type; };
 
50
/**\endcond*/
 
51
 
 
52
 
 
53
/* \brief An implementation of the negation of the enable if idiom.
 
54
 *
 
55
 * \sa EnableIf
 
56
 */
 
57
template <bool V, class T = void> struct DisableIf {};
 
58
/** \cond SPECIALIZATION_IMPLEMENTATION */
 
59
template <class T> struct DisableIf<false, T> { typedef T Type; };
 
60
/**\endcond*/
 
61
 
 
62
}
 
63
}
 
64
 
 
65
#endif // sitkEnableIf_h