Interface Technology Basics VST 3.7
SDK for developing VST plug-in
Loading...
Searching...
No Matches
funknownimpl.h File Reference
#include "pluginterfaces/base/fplatform.h"
#include "pluginterfaces/base/funknown.h"
#include <atomic>
#include <type_traits>

Classes

struct  HideIIDBase
 A base class which hides the FUnknown::iid static var. More...
 
struct  Destroyer
 Common destroyer policy for ski object instances. More...
 
struct  UID< t1, t2, t3, t4 >
 This class provides a compile-time uid and enables interfaces to specify a UID as a simple typedef. More...
 
struct  RefCounted
 This struct implements reference counting for the U::Implements template. More...
 
struct  NonDestroyable
 
struct  QueryInterfaceEnd< T >
 
struct  Directly< T >
 This struct is used to group a list of interfaces from which should be inherited and which should be available via the queryInterface method. More...
 
struct  Indirectly< T >
 This struct is used to group a list of interfaces from which should not be inherited but which should be available via the queryInterface method. More...
 
class  ImplementsImpl< Base, D, I >
 
class  ImplementsImpl< Base, Indirectly< IndirectInterfaces... >, Directly< DirectInterfaces... > >
 
class  ImplementsImpl< BaseClass, Directly< I, DirectIFs... >, Indirectly< IndirectIFs... > >
 This class implements the required virtual methods for the U::Unknown class.
 
struct  UID< t1, t2, t3, t4 >
 This class provides a compile-time uid and enables interfaces to specify a UID as a simple typedef. More...
 
struct  Directly< T >
 This struct is used to group a list of interfaces from which should be inherited and which should be available via the queryInterface method. More...
 
struct  Indirectly< T >
 This struct is used to group a list of interfaces from which should not be inherited but which should be available via the queryInterface method. More...
 

Namespaces

namespace  Steinberg
 This header provides classes for working with FUnknown.
 
namespace  Steinberg::FUnknownImpl
 
namespace  Steinberg::FUnknownImpl::Detail
 
namespace  Steinberg::U
 Shortcut namespace for implementing FUnknown based objects.
 

Typedefs

using Unknown = FUnknown
 Typedef to keep everything in this namespace.
 
template<typename BaseClass, typename D, typename I = Indirectly<>>
using Extends = ImplementsImpl<BaseClass, D, I>
 This typedef enables using a custom base class with the interface implementation.
 
template<typename D, typename I = Indirectly<>>
using Implements = ImplementsImpl<Detail::QueryInterfaceEnd<Detail::RefCounted>, D, I>
 This typedef provides the interface implementation.
 
template<typename D, typename I = Indirectly<>>
using ImplementsNonDestroyable
 This typedef provides the interface implementation for objects which should not be destroyed via FUnknown::release (like singletons).
 
using Unknown = FUnknownImpl::HideIIDBase
 
template<typename BaseClass, typename D, typename I = Indirectly<>>
using Extends
 This typedef enables using a custom base class with the interface implementation.
 
template<typename D, typename I = Indirectly<>>
using Implements
 This typedef provides the interface implementation.
 
template<typename D, typename I = Indirectly<>>
using ImplementsNonDestroyable
 This typedef provides the interface implementation for objects which should not be destroyed via FUnknown::release (like singletons).
 

Functions

template<typename T>
const TUIDgetTUID ()
 
template<typename I>
IPtr< I > cast (Unknown *u)
 Checks if the given Unknown can provide the specified interface and returns it in an IPtr.
 
template<typename I, typename S, typename T, typename U>
IPtr< I > cast (ImplementsImpl< S, T, U > *u)
 Casts to Unknown* and then to the specified interface.
 
template<typename I, typename T>
IPtr< I > cast (const IPtr< T > &u)
 Casts to Unknown* and then to the specified interface.
 
template<typename I>
IPtr< I > cast (Unknown *u)
 Checks if the given Unknown can provide the specified interface and returns it in an IPtr.
 
template<typename T>
const TUIDgetTUID ()
 
Empty

Copyright © Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.