7 #ifndef PXR_BASE_VT_VISIT_VALUE_H
8 #define PXR_BASE_VT_VISIT_VALUE_H
16 namespace Vt_ValueVisitDetail {
22 template <
class T,
class Visitor,
class ...Args>
25 decltype(std::forward<Visitor>(visitor)(
26 val.UncheckedGet<T>(), std::forward<Args>(
args)...))
28 return std::forward<Visitor>(visitor)(
29 val.UncheckedGet<
T>(), std::forward<Args>(
args)...);
32 template <
class T,
class Visitor,
class ...Args>
35 return std::forward<Visitor>(visitor)(val, std::forward<Args>(
args)...);
108 template <
class Visitor,
class ...Args>
116 #define VT_CASE_FOR_TYPE_INDEX(unused, elem) \
117 case VtGetKnownValueTypeIndex<VT_TYPE(elem)>(): \
118 return Vt_ValueVisitDetail::Visit<VT_TYPE(elem)>( \
119 value, std::forward<Visitor>(visitor), 0, \
120 std::forward<Args>(args)...); \
123 #undef VT_CASE_FOR_TYPE_INDEX
127 return Vt_ValueVisitDetail::Visit<VtValue>(
128 value, std::forward<Visitor>(visitor), 0,
129 std::forward<Args>(
args)...);
183 template <
class T,
class ...>
class Visitor,
184 typename ...TypeArgs,
194 #define VT_CASE_FOR_TYPE_INDEX(unused, elem) \
195 case VtGetKnownValueTypeIndex<VT_TYPE(elem)>(): \
196 return Visitor<VT_TYPE(elem), TypeArgs...>::Visit( \
197 std::forward<FnArgs>(args)...); \
200 #undef VT_CASE_FOR_TYPE_INDEX
205 std::forward<FnArgs>(
args)...);
238 template <
class T,
template <
class...>
class,
class ...>
class Visitor,
239 template <
class...>
class Tmpl,
240 typename ...TypeArgs,
250 #define VT_CASE_FOR_TYPE_INDEX(unused, elem) \
251 case VtGetKnownValueTypeIndex<VT_TYPE(elem)>(): \
252 return Visitor<VT_TYPE(elem), Tmpl, TypeArgs...>::Visit( \
253 std::forward<FnArgs>(args)...); \
256 #undef VT_CASE_FOR_TYPE_INDEX
261 std::forward<FnArgs>(
args)...);
267 #endif // PXR_BASE_VT_VISIT_VALUE_H
#define PXR_NAMESPACE_OPEN_SCOPE
GLsizei const GLfloat * value
auto VtVisitValueType(VtValue const &value, FnArgs &&...args)
auto VtVisitValue(VtValue const &value, Visitor &&visitor, Args &&...args)
#define VT_CASE_FOR_TYPE_INDEX(unused, elem)
#define VT_FOR_EACH_VALUE_TYPE(_macro)
int GetKnownValueTypeIndex() const
#define PXR_NAMESPACE_CLOSE_SCOPE
**If you just want to fire and args
auto Visit(VtValue const &val, Visitor &&visitor, long, Args &&...args)
auto Visit(VtValue const &val, Visitor &&visitor, int, Args &&...args) -> decltype(std::forward< Visitor >(visitor)(val.UncheckedGet< T >(), std::forward< Args >(args)...))