libbio
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | List of all members
bio::TransparentWrapper< T > Class Template Reference

#include <TransparentWrapper.h>

Inheritance diagram for bio::TransparentWrapper< T >:
Inheritance graph
[legend]

Public Types

typedef T Type
 

Public Member Functions

 TransparentWrapper (T t)
 
 TransparentWrapper (const TransparentWrapper< T > &other)
 
 ~TransparentWrapper ()
 
 operator T ()
 
TransparentWrapper< T > & operator= (const T &t)
 
TransparentWrapper< T > & operator= (const TransparentWrapper< T > &other)
 
bool operator== (const T &t) const
 
bool operator!= (const T &t) const
 
bool operator<= (const T &t) const
 
bool operator>= (const T &t) const
 
bool operator< (const T &t) const
 
bool operator> (const T &t) const
 
bool operator== (const TransparentWrapper &other) const
 
bool operator!= (const TransparentWrapper &other) const
 
bool operator<= (const TransparentWrapper &other) const
 
bool operator>= (const TransparentWrapper &other) const
 
bool operator< (const TransparentWrapper &other) const
 
bool operator> (const TransparentWrapper &other) const
 
Toperator++ ()
 
T operator++ (int)
 
Toperator-- ()
 
T operator-- (int)
 
T operator+= (const T &t)
 
T operator-= (const T &t)
 
T operator+= (const TransparentWrapper &other)
 
T operator-= (const TransparentWrapper &other)
 
T operator+ (const T &t) const
 
T operator- (const T &t) const
 
T operator+ (const TransparentWrapper &other) const
 
T operator- (const TransparentWrapper &other) const
 
T operator*= (const T &t)
 
T operator/= (const T &t)
 
T operator*= (const TransparentWrapper &other)
 
T operator/= (const TransparentWrapper &other)
 
T operator* (const T &t) const
 
T operator/ (const T &t) const
 
T operator* (const TransparentWrapper &other) const
 
T operator/ (const TransparentWrapper &other) const
 
friend::std::ostream & operator<< (std::ostream &out, const TransparentWrapper &t)
 
Toperator-> ()
 
const Toperator-> () const
 

Public Attributes

T mT
 

Detailed Description

template<typename T>
class bio::TransparentWrapper< T >

TransparentWrappers should appear to be the type they wrap in all respects. However, this is not currently possible for member access.
Unfortunately, operator type() alone is not sufficient to treat this new class as the type it holds and we must instead forward all operations to the contained type.
ugh.
If you know of a better solution to this problem, please make a pull request.

For example 5 + TransparentWrapper<int>(2) = 7; however, TransparentWrapper<MyClass>(myObject).mSomeMember is invalid.
To use TransparentWrappers for more than operations on built-in types, you can use the pattern:
MyClass* myObject;
*myObject = TransparentWrapper< MyClass >(myOtherObject);
Using this pattern invokes the operator MyClass(), casting *this TransparentWrapper to an instance of MyClass.

This wrapper can be inherited from (BIO_STRONG_TYPEDEF, Cached, Final).
As of BIO_ABI_VERSION 12 the destructor is NON-virtual: TransparentWrapper has no vtable, so it adds no vptr to the (typically 1-4 byte) value it wraps. This is a deliberate footprint optimization — a wrapped Id / Property / BondType is now a POD-sized value instead of carrying an 8 B vptr (e.g. Bond 32 -> 16 B).
CONSTRAINT (load-bearing): because the destructor is non-virtual you MUST NEVER destroy a derived wrapper through a TransparentWrapper< T >* base pointer — delete (TransparentWrapper< T >*) derivedPtr is undefined behavior. Every wrapper type is used BY VALUE (members, Arrangement / vector elements, return values); none is heap-allocated and deleted through this base, which is exactly what makes the de-virt safe. Audited fleet-wide (lib/bio + every consumer) before the v12 cascade. If you ever need polymorphic destruction of a wrapper, give that subclass its OWN virtual dtor and delete through that type.

NOTE: TransparentWrappers will not be Primitive unless explicitly implemented as such. See macros/StrongTypedef.h for more info.

Template Parameters
T

Member Typedef Documentation

◆ Type

Constructor & Destructor Documentation

◆ TransparentWrapper() [1/2]

template<typename T >
bio::TransparentWrapper< T >::TransparentWrapper ( T  t)
inline

◆ TransparentWrapper() [2/2]

template<typename T >
bio::TransparentWrapper< T >::TransparentWrapper ( const TransparentWrapper< T > &  other)
inline

◆ ~TransparentWrapper()

Member Function Documentation

◆ operator T()

template<typename T >
bio::TransparentWrapper< T >::operator T ( )
inline

◆ operator!=() [1/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator!= ( const T t) const
inline

◆ operator!=() [2/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator!= ( const TransparentWrapper< T > &  other) const
inline

◆ operator*() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator* ( const T t) const
inline

◆ operator*() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator* ( const TransparentWrapper< T > &  other) const
inline

◆ operator*=() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator*= ( const T t)
inline

◆ operator*=() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator*= ( const TransparentWrapper< T > &  other)
inline

◆ operator+() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator+ ( const T t) const
inline

◆ operator+() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator+ ( const TransparentWrapper< T > &  other) const
inline

◆ operator++() [1/2]

template<typename T >
T & bio::TransparentWrapper< T >::operator++ ( )
inline

◆ operator++() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator++ ( int  )
inline

◆ operator+=() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator+= ( const T t)
inline

◆ operator+=() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator+= ( const TransparentWrapper< T > &  other)
inline

◆ operator-() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator- ( const T t) const
inline

◆ operator-() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator- ( const TransparentWrapper< T > &  other) const
inline

◆ operator--() [1/2]

template<typename T >
T & bio::TransparentWrapper< T >::operator-- ( )
inline

◆ operator--() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator-- ( int  )
inline

◆ operator-=() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator-= ( const T t)
inline

◆ operator-=() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator-= ( const TransparentWrapper< T > &  other)
inline

◆ operator->() [1/2]

template<typename T >
T * bio::TransparentWrapper< T >::operator-> ( )
inline

◆ operator->() [2/2]

template<typename T >
const T * bio::TransparentWrapper< T >::operator-> ( ) const
inline

◆ operator/() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator/ ( const T t) const
inline

◆ operator/() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator/ ( const TransparentWrapper< T > &  other) const
inline

◆ operator/=() [1/2]

template<typename T >
T bio::TransparentWrapper< T >::operator/= ( const T t)
inline

◆ operator/=() [2/2]

template<typename T >
T bio::TransparentWrapper< T >::operator/= ( const TransparentWrapper< T > &  other)
inline

◆ operator<() [1/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator< ( const T t) const
inline

◆ operator<() [2/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator< ( const TransparentWrapper< T > &  other) const
inline

◆ operator<<()

template<typename T >
friend::std::ostream & bio::TransparentWrapper< T >::operator<< ( std::ostream &  out,
const TransparentWrapper< T > &  t 
)
inline

◆ operator<=() [1/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator<= ( const T t) const
inline

◆ operator<=() [2/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator<= ( const TransparentWrapper< T > &  other) const
inline

◆ operator=() [1/2]

template<typename T >
TransparentWrapper< T > & bio::TransparentWrapper< T >::operator= ( const T t)
inline

◆ operator=() [2/2]

template<typename T >
TransparentWrapper< T > & bio::TransparentWrapper< T >::operator= ( const TransparentWrapper< T > &  other)
inline

◆ operator==() [1/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator== ( const T t) const
inline

◆ operator==() [2/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator== ( const TransparentWrapper< T > &  other) const
inline

◆ operator>() [1/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator> ( const T t) const
inline

◆ operator>() [2/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator> ( const TransparentWrapper< T > &  other) const
inline

◆ operator>=() [1/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator>= ( const T t) const
inline

◆ operator>=() [2/2]

template<typename T >
bool bio::TransparentWrapper< T >::operator>= ( const TransparentWrapper< T > &  other) const
inline

Member Data Documentation

◆ mT

template<typename T >
T bio::TransparentWrapper< T >::mT

The documentation for this class was generated from the following file: