VTK
9.0.1
Common
Core
vtkMeta.h
Go to the documentation of this file.
1
/*=========================================================================
2
3
Program: Visualization Toolkit
4
Module: vtkMeta.h
5
6
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7
All rights reserved.
8
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10
This software is distributed WITHOUT ANY WARRANTY; without even
11
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12
PURPOSE. See the above copyright notice for more information.
13
14
=========================================================================*/
15
16
#ifndef vtkMeta_h
17
#define vtkMeta_h
18
19
#include <type_traits>
20
#include <utility>
21
28
// Forward decs for StripPointers:
29
template
<
typename
ArrayType>
30
class
vtkNew
;
31
template
<
typename
ArrayType>
32
class
vtkSmartPointer
;
33
template
<
typename
ArrayType>
34
class
vtkWeakPointer
;
35
36
namespace
vtk
37
{
38
namespace
detail
39
{
40
41
//------------------------------------------------------------------------------
42
// Strip vtkNew, vtkSmartPointer, etc from a type.
43
template
<
typename
T>
44
struct
StripPointers
45
{
46
using
type
= T;
47
};
48
49
template
<
typename
T>
50
struct
StripPointers
<T*>
51
{
52
using
type
= T;
53
};
54
55
template
<
typename
ArrayType>
56
struct
StripPointers
<
vtkNew
<ArrayType> >
57
{
58
using
type
= ArrayType;
59
};
60
61
template
<
typename
ArrayType>
62
struct
StripPointers
<
vtkSmartPointer
<ArrayType> >
63
{
64
using
type
= ArrayType;
65
};
66
67
template
<
typename
ArrayType>
68
struct
StripPointers
<
vtkWeakPointer
<ArrayType> >
69
{
70
using
type
= ArrayType;
71
};
72
73
//------------------------------------------------------------------------------
74
// Test if a type is defined (true) or just forward declared (false).
75
template
<
typename
T>
76
struct
IsComplete
77
{
78
private
:
79
// Can't take the sizeof an incomplete class.
80
template
<
typename
U, std::
size_t
= sizeof(U)>
81
static
std::true_type
impl
(U*);
82
static
std::false_type
impl
(...);
83
using
bool_constant = decltype(
impl
(std::declval<T*>()));
84
85
public
:
86
static
constexpr
bool
value
=
bool_constant::value
;
87
};
88
89
}
90
}
// end namespace vtk::detail
91
92
#endif // vtkMeta_h
93
94
// VTK-HeaderTest-Exclude: vtkMeta.h
vtk::detail::StripPointers
Definition:
vtkMeta.h:44
vtkX3D::value
@ value
Definition:
vtkX3D.h:226
vtkSmartPointer
Hold a reference to a vtkObjectBase instance.
Definition:
vtkMeta.h:32
detail
Definition:
vtkGenericDataArrayLookupHelper.h:31
vtk::detail::IsComplete
Definition:
vtkMeta.h:76
vtk::detail::IsComplete::value
static constexpr bool value
Definition:
vtkMeta.h:86
vtk::detail::StripPointers< vtkNew< ArrayType > >::type
ArrayType type
Definition:
vtkMeta.h:58
vtk::detail::StripPointers< vtkSmartPointer< ArrayType > >::type
ArrayType type
Definition:
vtkMeta.h:64
vtkNew
Allocate and hold a VTK object.
Definition:
vtkMeta.h:30
vtk::detail::StripPointers< vtkWeakPointer< ArrayType > >::type
ArrayType type
Definition:
vtkMeta.h:70
impl
Definition:
TestMotionFXCFGReaderCommon.h:36
vtk::detail::StripPointers::type
T type
Definition:
vtkMeta.h:46
vtk
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
Definition:
vtkAtomicTypeConcepts.h:21
vtkWeakPointer
a weak reference to a vtkObject.
Definition:
vtkMeta.h:34
vtk::detail::StripPointers< T * >::type
T type
Definition:
vtkMeta.h:52
Generated on Thu Jun 24 2021 15:17:26 for VTK by
1.8.17