Если вы посмотрите на реализацию библиотеки C ++ STL в XCode, вы можете следовать моделям специализации шаблонов других, таких как std::is_integral
или std::is_floating_point
:
template <class T> struct isObjcObject : public std::false_type { };
template <> struct isObjcObject<id> : public std::true_type { };
, где std::false_type
и std::true_type
определены в заголовочном файле <type_traits>
.
Если по какой-либо причине у вас нет std::false_type
и std::true_type
(в зависимости от вашей версии C ++), вы можете сами определить их так:
template<bool B> struct boolean_constant { static constexpr const bool value = B; };
template <class T> struct isObjcObject : public boolean_constant<false> { };
template <> struct isObjcObject<id> : public boolean_constant<true> { };
Обратите внимание, что вы можете сделать это и для классов Objective-C:
template <class T> struct isObjcClass : public std::false_type { };
template <> struct isObjcClass<Class> : public std::true_type { };