PolicyCB is a C++20 library that provides a flexbible Callback implementation. This is a highly experimental implementation and shouldn't be use in any production environment. View the associated Blog post for more details. Users may configure the behavior of the class via the below template parameters:
// The policy on allowed callable and Callback itself// Note that when none of them is DYNAMIC, Callback<> could// utilize flattened function pointer to save a virtual call// @{enumclassMovePolicy
{
// Allows non-trivially movable objectDYNAMIC = 0,
// Only allows trivially movable objectTRIVIAL_ONLY = 1,
// Forbids any move on CallbackNOMOVE = 2,
};
enumclassCopyPolicy
{
// Allows non-trivially copyable objectDYNAMIC = 0,
// Only allows trivially copyable objectTRIVIAL_ONLY = 1,
// Forbids any copy on CallbackNOCOPY = 2,
};
enumclassDestroyPolicy
{
// Allows non-trivially destructable objectDYNAMIC = 0,
// Only allows trivially destructable objectTRIVIAL_ONLY = 1,
};
// @}// Policy on the small-buffer-optimization storageenumclassSBOPolicy
{
// Allows the Callback to store arbitrary-sized object// The storage takes InitialBufferSize + 8 bytesDYNAMIC_GROWTH = 0,
// Only allows the Callback to store a object with specified// maximum size. Causes an compilation error if the object is// too large.FIXED_SIZE = 1,
// This disables storage of the original function,// essentially makes the Callback a function pointerNO_STORAGE = 2,
};
template<typenameFT, // function signature
MovePolicy MP,
CopyPolicy CP,
DestroyPolicy DP,
SBOPolicy SBOP,
std::size_t InitialBufferSize = 16>
classCallback;This is a header-only library. Drop in include/PolicyCB.hpp into your project to use it.
Apache 2.0