Interface Technology Basics  VST 3.7
SDK for developing VST plug-in
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
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...
 
class  ImplementsImpl< Base, D, I >
 
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. 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 = ImplementsImpl< Detail::QueryInterfaceEnd< Detail::NonDestroyable >, D, I >
 This typedef provides the interface implementation for objects which should not be destroyed via FUnknown::release (like singletons).
 
using Unknown = FUnknownImpl::HideIIDBase
 

Functions

template<typename T >
const TUID & getTUID ()
 
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.
 
Empty

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