InPlaceService#

template<class T>
class InPlaceService : public sb::di::IServiceInstance#

Public Types

using Ptr = std::unique_ptr<InPlaceService>#

Public Functions

template<class ...Args>
inline explicit InPlaceService(Args&&... args)#
InPlaceService(const InPlaceService&) = delete#
InPlaceService(InPlaceService&&) = delete#
InPlaceService &operator=(const InPlaceService&) = delete#
InPlaceService &operator=(InPlaceService&&) = delete#
inline virtual void *get() const override#

Returns service pointer as void *.

inline virtual void *getForMoveOut() override#

Returns service pointer as void *,.

Method is used to ensure that service can be moved out

Throws:

sb::di::CannotMoveOutServiceException – Example:

void* service = instance->getForMoveOut();

inline virtual void *release() override#

Releases service ownership as void *.

If instance is owner of service it will release this ownership just like std::unique_ptr<T>::release(), otherwise it will throw exception

Example:

std::unique_ptr<T> service{static_cast<T *>(instance->release())};

Warning

Using this method might cause memory leaks, client is responsible for managing this pointner lifetime, the best approach is to immediately wrap this pointer with proper std::unique_ptr<T>

Throws:

sb::di::CannotReleaseServiceException

inline virtual TypeId getTypeId() const override#

Get the TypeId of service.

This method can be used to check if casting is safe

Example:

if(instance->getTypeId() == typeid(T)) {
     T* service = instance->getAs<T>();
}

inline virtual bool isValid() const override#

Checks if service instance is valid.

If service instance is invalid, get and release methods might lead to undefined behaviour