Я читаю Scott Meyers 'Effective C++. Он говорит о классах признаков, я понял, что мне нужно, чтобы они определяли тип объекта во время компиляции, но я не могу понять его объяснения о том, что на самом деле делают эти классы? (с технической точки зрения)Как работают классы признаков?
ответ
Возможно, вы ожидаете какой-то магии, которая заставляет черты характера работать. В таком случае будьте разочарованы - нет волшебства. Типовыми признаками являются вручную, определенные для каждого типа. Например, рассмотрим iterator_traits
, который предоставляет typedefs (например, value_type
) для итераторов.
С их помощью, вы можете написать
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
Но чтобы сделать эту работу, есть на самом деле явное определение где-то в <iterator>
заголовок, который читает что-то вроде этого:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
Это частичная специализация Тип iterator_traits
для типов форм T*
, т.е. указатели некоторый общий тип.
В том же ключе iterator_traits
специализированы для других итераторов, например. typename vector<T>::iterator
.
Классы классов не определяют тип объекта. Вместо этого они предоставляют дополнительную информацию о типе, как правило, путем определения typedefs или констант внутри признака.
+1 для эффективного объединения теории и реализации. –
- 1. Как работают классы python?
- 2. Как работают классы атрибутов?
- 3. Как работают статические классы VB.NET?
- 4. классы css не работают
- 5. импортированные классы не работают
- 6. Псевдо классы не работают
- 7. Классы Android не работают
- 8. классы Animation.css не работают
- 9. Двойные классы не работают
- 10. Классы не работают стабильные
- 11. Xcode - Пользовательские классы не работают
- 12. PHP Вложенные классы работают ... вроде?
- 13. Как классы типа работают в Haskell?
- 14. Понимание того, как работают классы в Java
- 15. Когда Qt классы работают как смарт-указатели
- 16. Как внутренние классы работают в C#?
- 17. Как классы работают в файле CSS?
- 18. Как работают классы Java CookieHandler и CookieManager?
- 19. Классы и указатели, как они работают?
- 20. Как работают классы WinRTs CaptureElement и MediaCapture?
- 21. Как работают классы ExceptionSorter в JBoss?
- 22. CSS-классы шрифтов не работают
- 23. Laravel - пользовательские классы не работают
- 24. Наследование CSS классы не работают
- 25. Суммируя классы CSS не работают
- 26. Как могут возникнуть определения конструктора от признаков?
- 27. классы C++ не работают для меня
- 28. Классы Bootstrap не работают в компоненте ReactJS
- 29. Как классы маркировки как [Сериализуемые] работают на C#?
- 30. Wordpress menu CSS-классы не работают
+1 за отсутствие магии. Несмотря на это, нет ли каких-либо черт (например, в стандартной библиотеке C++ 0x), которые нельзя надежно определить, используя только язык, и для чего нужна специальная «магическая» помощь от компилятора? – UncleBens
@UncleBens: Я не знаю, какие черты C++ 0x определяет, но я уверен, что таких признаков не существует до C++ 0x. –
Это не * сейчас * волшебство, работающее внутри ['std :: basic_type'] (http://en.cppreference.com/w/cpp/types/underlying_type)? – Wolf