1 #ifndef TIL_LABEL_CLASSES_H 2 #define TIL_LABEL_CLASSES_H 26 template <
typename T >
struct PointerTraits;
35 #define DEFINE_LABEL_CLASS(name) DEFINE_LABEL_CLASS_WITH_INHERITANCE(name, ) 37 #define DEFINE_LABEL_CLASS_WITH_INHERITANCE(name, inherit) \ 38 DEFINE_LABEL_CLASS_FULL(name##_label, Is##name) \ 39 DEFINE_TEST_CLASS_FULL(is_##name, Is##name, inherit) \ 41 #define DEFINE_LABEL_CLASS_FULL(labelname, memtypename) \ 42 class labelname { public: typedef void memtypename; }; \ 52 #define DEFINE_TEST_CLASS_FULL(testname, memtypename, inherit) \ 53 template <typename T> \ 54 class testname inherit \ 58 struct No { char a[2]; }; \ 59 template <typename U> static Yes testfunc (typename U::memtypename const*); \ 60 template <typename U> static No testfunc (...); \ 62 static const bool value = (sizeof(testfunc <T>(0)) == sizeof(Yes)); \ 65 #define DEFINE_TEST_CLASS_FULL(testname, memtypename, inherit) \ 66 template <typename T> \ 67 class testname inherit \ 71 struct No { char a[2]; }; \ 72 template <typename U> static Yes testfunc (typename U:: memtypename const*); \ 73 template <typename U> static No testfunc (...); \ 76 value = (sizeof(testname <T>::template testfunc <T>(0)) == sizeof(Yes)) \ 83 template <
typename T >
88 struct No {
char a[2]; };
146 template <
typename T>
151 struct No {
char a[2]; };
152 template <
typename U>
static Yes isNeighborhood (
typename U::IsNeighborhood
const*);
153 template <
typename U>
static No isNeighborhood (...);
158 value = (
sizeof(isNeighborhood <T>(0)) == 1)
167 #undef DEFINE_LABEL_CLASS 168 #undef DEFINE_LABEL_CLASS_WITH_INHERITANCE static Yes isImagePointer(typename PointerTraits< U >::DataType::IsImagePointer const *)
DEFINE_TEST_CLASS_FULL(has_result_type, result_type,)
Belongs to package Box Do not include directly, include til/Box.h instead.
A multi-dimensional container.
DEFINE_LABEL_CLASS(ExtrapolableImage)
Label for extrapolable images.
DEFINE_LABEL_CLASS_WITH_INHERITANCE(VolumetricImageIterator, :public ImageIterator_label)
Label for TIL smart pointers.