|
| class | ValueMask |
| |
| struct | PointIndex< IntType_, Kind > |
| | Integer wrapper, required to distinguish PointIndexGrid and PointDataGrid from Int32Grid and Int64Grid. More...
|
| |
| struct | IsSpecializationOf< T, Template > |
| | Helper metafunction used to determine if the first template parameter is a specialization of the class template given in the second template parameter. More...
|
| |
| struct | IsSpecializationOf< Template< Args... >, Template > |
| |
| struct | index_sequence< Ns > |
| | Re-implementation of C++17's index_sequence and the helper alias make_index_sequence. This was introduced to fix an issue with clang's builtin implementation which treats template specializations of builtin templates differently when a subsequent parameter is dependent. The result is a resolution failure during partial specialization selection. For example, the following will fail to specialize: More...
|
| |
| struct | VecTraits< T, bool > |
| |
| struct | VecTraits< T, false > |
| |
| struct | QuatTraits< T, bool > |
| |
| struct | QuatTraits< T, false > |
| |
| struct | MatTraits< T, bool > |
| |
| struct | MatTraits< T, false > |
| |
| struct | ValueTraits< T, bool > |
| |
| struct | ValueTraits< T, false > |
| |
| struct | ConvertElementType< T, SubT > |
| | Conversion classes for changing the underlying type of VDB types. More...
|
| |
| struct | ConvertElementType< math::Vec2< T >, SubT > |
| |
| struct | ConvertElementType< math::Vec3< T >, SubT > |
| |
| struct | ConvertElementType< math::Vec4< T >, SubT > |
| |
| struct | ConvertElementType< math::Quat< T >, SubT > |
| |
| struct | ConvertElementType< math::Mat3< T >, SubT > |
| |
| struct | ConvertElementType< math::Mat4< T >, SubT > |
| |
| struct | int_t< Bits, Signed > |
| |
| struct | int_t< 8ul, true > |
| |
| struct | int_t< 16ul, true > |
| |
| struct | int_t< 32ul, true > |
| |
| struct | int_t< 64ul, true > |
| |
| struct | int_t< 8ul, false > |
| |
| struct | int_t< 16ul, false > |
| |
| struct | int_t< 32ul, false > |
| |
| struct | int_t< 64ul, false > |
| |
| struct | flt_t< Bits > |
| |
| struct | flt_t< 16ul > |
| |
| struct | flt_t< 32ul > |
| |
| struct | flt_t< 64ul > |
| |
| struct | PromoteType< T > |
| | Promotion classes which provide an interface for elevating and demoting a scalar or VDB type to a higher or lower precision. Integer types preserve their sign. Types promotion are only valid between 8 to 64 bits (long doubles are not supported). More...
|
| |
| struct | PromoteContainerType< T, ContainerT > |
| |
| struct | PromoteType< math::Vec2< T > > |
| |
| struct | PromoteType< math::Vec3< T > > |
| |
| struct | PromoteType< math::Vec4< T > > |
| |
| struct | PromoteType< math::Quat< T > > |
| |
| struct | PromoteType< math::Mat3< T > > |
| |
| struct | PromoteType< math::Mat4< T > > |
| |
| struct | CanConvertType< FromType, ToType > |
| | CanConvertType<FromType, ToType>::value is true if a value of type ToType can be constructed from a value of type FromType. More...
|
| |
| struct | CanConvertType< T, math::Vec2< T > > |
| |
| struct | CanConvertType< T, math::Vec3< T > > |
| |
| struct | CanConvertType< T, math::Vec4< T > > |
| |
| struct | CanConvertType< math::Vec2< T >, math::Vec2< T > > |
| |
| struct | CanConvertType< math::Vec3< T >, math::Vec3< T > > |
| |
| struct | CanConvertType< math::Vec4< T >, math::Vec4< T > > |
| |
| struct | CanConvertType< T0, math::Vec2< T1 > > |
| |
| struct | CanConvertType< T0, math::Vec3< T1 > > |
| |
| struct | CanConvertType< T0, math::Vec4< T1 > > |
| |
| struct | CanConvertType< PointIndex32, PointDataIndex32 > |
| |
| struct | CanConvertType< PointDataIndex32, PointIndex32 > |
| |
| struct | CanConvertType< T, ValueMask > |
| |
| struct | CanConvertType< ValueMask, T > |
| |
| struct | CopyConstness< FromType, ToType > |
| | CopyConstness<T1, T2>::Type is either const T2 or T2 with no const qualifier, depending on whether T1 is const. More...
|
| |
| class | CombineArgs< AValueType, BValueType > |
| | This struct collects both input and output arguments to "grid combiner" functors used with the tree::TypedGrid::combineExtended() and combine2Extended() methods. AValueType and BValueType are the value types of the two grids being combined. More...
|
| |
| struct | SwappedCombineOp< ValueType, CombineOp > |
| |
| class | ShallowCopy |
| | Tag dispatch class that distinguishes shallow copy constructors from deep copy constructors. More...
|
| |
| class | TopologyCopy |
| | Tag dispatch class that distinguishes topology copy constructors from deep copy constructors. More...
|
| |
| class | DeepCopy |
| | Tag dispatch class that distinguishes constructors that deep copy. More...
|
| |
| class | Steal |
| | Tag dispatch class that distinguishes constructors that steal. More...
|
| |
| class | PartialCreate |
| | Tag dispatch class that distinguishes constructors during file input. More...
|
| |
|
| using | half = internal::half |
| |
| using | Index32 = uint32_t |
| |
| using | Index64 = uint64_t |
| |
| using | Index = Index32 |
| |
| using | Int16 = int16_t |
| |
| using | Int32 = int32_t |
| |
| using | Int64 = int64_t |
| |
| using | Int = Int32 |
| |
| using | Byte = unsigned char |
| |
| using | Real = double |
| |
| using | Vec2R = math::Vec2< Real > |
| |
| using | Vec2I = math::Vec2< Index32 > |
| |
| using | Vec2f = math::Vec2< float > |
| |
| using | Vec2H = math::Vec2< math::half > |
| |
| using | Vec3R = math::Vec3< Real > |
| |
| using | Vec3I = math::Vec3< Index32 > |
| |
| using | Vec3f = math::Vec3< float > |
| |
| using | Vec3H = math::Vec3< math::half > |
| |
| using | Vec3U8 = math::Vec3< uint8_t > |
| |
| using | Vec3U16 = math::Vec3< uint16_t > |
| |
| using | BBoxd = math::BBox< Vec3d > |
| |
| using | Vec4R = math::Vec4< Real > |
| |
| using | Vec4I = math::Vec4< Index32 > |
| |
| using | Vec4f = math::Vec4< float > |
| |
| using | Vec4H = math::Vec4< math::half > |
| |
| using | Mat3R = math::Mat3< Real > |
| |
| using | Mat4R = math::Mat4< Real > |
| |
| using | QuatR = math::Quat< Real > |
| |
| template<typename T > |
| using | SharedPtr = std::shared_ptr< T > |
| |
| template<typename T > |
| using | WeakPtr = std::weak_ptr< T > |
| |
| using | PointIndex32 = PointIndex< Index32, 0 > |
| |
| using | PointIndex64 = PointIndex< Index64, 0 > |
| |
| using | PointDataIndex32 = PointIndex< Index32, 1 > |
| |
| using | PointDataIndex64 = PointIndex< Index64, 1 > |
| |
| template<std::size_t N> |
| using | make_index_sequence = std::decay_t< decltype(make_index_sequence_impl< N >())> |
| |
| #define OPENVDB_INIT_INVOKABLE_MEMBER_FUNCTION |
( |
|
F | ) |
|
Value:template <typename ClassT, typename... Args> \
struct HasInvokableMemberFunction_##F { \
private: \
template <typename T> \
static auto check(T*) -> \
decltype(std::declval<T>(). \
F(std::declval<Args>()...), std::true_type()); \
template <typename T> \
static auto check(...) -> std::false_type; \
public: \
static constexpr bool value = \
decltype(check<ClassT>(nullptr))::value; \
};
Macros to help determine whether or not a class has a particular member function.
These macros work by instantiating unique templated instances of helper structs for a particular member function signature and name which can then be queried.
- The first macro, INVOKABLE, defines a helper struct which determines if a member function can be called with a given set of argument types. Note that the return type is not provided.
- The second macro defines a helper struct which determines if the member function exists with the exact same signature, including all argument and function attributes (const-ness, noexcept, etc)
Use the first solution if all you want to determine is whether a given method can be called, and the second if you need exact resolution.
2 struct MyClass { int test(double) { return 0; } };
4 // The following examples work from the struct type created by:
5 OPENVDB_INIT_INVOKABLE_MEMBER_FUNCTION(test);
8 static_assert(OPENVDB_HAS_INVOKABLE_MEMBER_FUNCTION(MyClass, test, double));
9 // Will assert true, int can be converted to double
10 static_assert(OPENVDB_HAS_INVOKABLE_MEMBER_FUNCTION(MyClass, test, int));
11 // Will assert false, needs at least one argument
12 static_assert(OPENVDB_HAS_INVOKABLE_MEMBER_FUNCTION(MyClass, test);
15 // The following examples work from the struct type created by:
16 OPENVDB_INIT_MEMBER_FUNCTION(test);
19 static_assert(OPENVDB_HAS_MEMBER_FUNCTION(MyClass, test, void(MyClass::*)(double)));
20 // Only case where this assert true
21 static_assert(OPENVDB_HAS_MEMBER_FUNCTION(MyClass, test, int(MyClass::*)(double)));