Boost type_traits is_array - PullRequest
       21

Boost type_traits is_array

5 голосов
/ 25 мая 2011

Я пытался пройтись по заголовкам типовых черт Boost и теперь чувствую себя довольно плохо, учитывая интенсивную нечитаемость, обеспечиваемую бесчисленным #define.А потом еще #define.

Если говорить точнее, мне интересно выяснить следующие 3 черты: если тип T является массивом, классом или перечислением.

Может кто-нибудь помочь предложить какой-нибудь способ расшифровки метода, лежащего в основе кажущегося безумия?Как и теория, объясняющая, как вы черпаете черту из какого-либо типа, любого соответствующего материала для чтения и т. Д.

1 Ответ

4 голосов
/ 25 мая 2011

is_array довольно просто и просто:

template<class T>
struct is_array{
  static const bool value = false;
};

template<class T, std::size_t N>
struct is_array< T (&)[N] >{
  static const bool value = true;
};

Просто частичная специализация на типе ссылки на массив.

is_class немного сложнееи полагается на разрешение перегрузки и тот факт, что классы и структуры обладают конструкторами (или деструкторами).Поскольку я в настоящее время на моем iPod Touch, я не могу показать пример.Я отредактирую один из них, как только у меня снова будет доступ к ПК.

is_enum зависит от встроенных функций компилятора, я верю, так что никакого примера там нет.по памяти, я могу ошибаться с перечислением.

...