24 #ifndef PXR_BASE_TF_FUNCTION_REF_H
25 #define PXR_BASE_TF_FUNCTION_REF_H
30 #include <type_traits>
33 PXR_NAMESPACE_OPEN_SCOPE
91 template <
class Ret,
class... Args>
98 : _fn(static_cast<void const *>(std::addressof(fn)))
99 , _invoke(_InvokeFn<Fn>) {}
113 operator=(Fn &fn) noexcept {
126 inline Ret operator()(Args... args)
const {
127 return _invoke(_fn, std::forward<Args>(args)...);
132 static Ret _InvokeFn(
void const *fn, Args...args) {
133 using FnPtr =
typename std::add_pointer<
134 typename std::add_const<Fn>::type>::type;
135 return (*static_cast<FnPtr>(fn))(std::forward<Args>(args)...);
139 Ret (*_invoke)(
void const *, Args...);
150 PXR_NAMESPACE_CLOSE_SCOPE
152 #endif // PXR_BASE_TF_FUNCTION_REF_H
void swap(ArAssetInfo &lhs, ArAssetInfo &rhs)
This class provides a non-owning reference to a type-erased callable object with a specified signatur...
void swap(UsdStageLoadRules &l, UsdStageLoadRules &r)
Swap the contents of rules l and r.