1
/*=========================================================================
3
* Copyright Insight Software Consortium
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
9
* http://www.apache.org/licenses/LICENSE-2.0.txt
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.
17
*=========================================================================*/
18
#ifndef sitkEnableIf_h
19
#define sitkEnableIf_h
26
/* \brief This is an implementation of the enable if idiom.
28
* This template enables specialization of a templated function based
29
* on some traits or concepts. It is implemented with SFINAE.
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.
37
* template<class TImageType>
38
* typename EnableIf<IsBasic<TImageType>::Value>::Type
39
* AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth );
41
* template<class TImageType>
42
* typename EnableIf<IsVector<TImageType>::Value>::Type
43
* AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth );
47
template <bool V, class T = void> struct EnableIf {};
48
/** \cond SPECIALIZATION_IMPLEMENTATION */
49
template <class T> struct EnableIf<true, T> { typedef T Type; };
53
/* \brief An implementation of the negation of the enable if idiom.
57
template <bool V, class T = void> struct DisableIf {};
58
/** \cond SPECIALIZATION_IMPLEMENTATION */
59
template <class T> struct DisableIf<false, T> { typedef T Type; };
65
#endif // sitkEnableIf_h