24 #ifndef PXR_BASE_TF_FUNCTION_REF_H
25 #define PXR_BASE_TF_FUNCTION_REF_H
30 #include <type_traits>
91 template <
class Ret,
class... Args>
98 : _fn(static_cast<void const *>(std::addressof(fn)))
99 , _invoke(_InvokeFn<Fn>) {}
127 return _invoke(_fn, std::forward<Args>(
args)...);
132 static Ret _InvokeFn(
void const *fn, Args...args) {
133 using FnPtr =
typename std::add_pointer<
135 return (*static_cast<FnPtr>(fn))(std::forward<Args>(
args)...);
139 Ret (*_invoke)(
void const *, Args...);
152 #endif // PXR_BASE_TF_FUNCTION_REF_H
void swap(ArAssetInfo &lhs, ArAssetInfo &rhs)
void swap(UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &a, UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &b)
constexpr TfFunctionRef(Fn &fn) noexcept
Construct with an lvalue callable fn.
void swap(TfFunctionRef &other) noexcept
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
**If you just want to fire and args
TfFunctionRef & operator=(Fn &fn) noexcept
Assign from an lvalue callable fn.
Ret operator()(Args...args) const
Invoke the callable that this object refers to with args.