VTK  9.6.20260315
vtkMeta.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
4#ifndef vtkMeta_h
5#define vtkMeta_h
6
7#include "vtkABINamespace.h"
8
9#include <type_traits>
10#include <utility>
11
17
18// Forward decs for StripPointers:
19VTK_ABI_NAMESPACE_BEGIN
20template <typename ArrayType>
21class vtkNew;
22template <typename ArrayType>
23class vtkSmartPointer;
24template <typename ArrayType>
25class vtkWeakPointer;
26template <typename ArrayType>
27class vtkWeakPtr;
28VTK_ABI_NAMESPACE_END
29
30namespace vtk
31{
32namespace detail
33{
34VTK_ABI_NAMESPACE_BEGIN
35
36//------------------------------------------------------------------------------
37// Strip vtkNew, vtkSmartPointer, etc from a type.
38template <typename T>
40{
41 using type = T;
42};
43
44template <typename T>
45struct StripPointers<T*>
46{
47 using type = T;
48};
49
50template <typename ArrayType>
51struct StripPointers<vtkNew<ArrayType>>
52{
53 using type = ArrayType;
54};
55
56template <typename ArrayType>
58{
59 using type = ArrayType;
60};
61
62template <typename ArrayType>
63struct StripPointers<vtkWeakPointer<ArrayType>>
64{
65 using type = ArrayType;
66};
67
68template <typename ArrayType>
69struct StripPointers<vtkWeakPtr<ArrayType>>
70{
71 using type = ArrayType;
72};
73
74//------------------------------------------------------------------------------
75// Test if a type is defined (true) or just forward declared (false).
76template <typename T>
78{
79private:
80 // Can't take the sizeof an incomplete class.
81 template <typename U, std::size_t = sizeof(U)>
82 static std::true_type impl(U*);
83 static std::false_type impl(...);
84 using bool_constant = decltype(impl(std::declval<T*>()));
85
86public:
87 static constexpr bool value = bool_constant::value;
88};
89
90VTK_ABI_NAMESPACE_END
91}
92} // end namespace vtk::detail
93
94#endif // vtkMeta_h
95
96// VTK-HeaderTest-Exclude: vtkMeta.h
Allocate and hold a VTK object.
Definition vtkNew.h:167
Hold a reference to a vtkObjectBase instance.
a weak reference to a vtkObject.
a weak reference to a vtkObjectBase.
Definition vtkWeakPtr.h:52
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
static constexpr bool value
Definition vtkMeta.h:87