Вопрос по шаблонам
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Помогите разобраться.
Читал статью на Хабре. Не понял откуда что берется в шаблонах. Попробовал поэкспериментировать — вопросов еще больше :(
Есть такая штука:
Это вообще что? Судя по тому, что после class ratio отстутствуют фигурные скобки, это опережающая декларация класса. Т.е. ожидается, что где-то дальше будет полное определение класса. Правильно? Но далее этого определения класса вроде как нет, а сразу используется:
А Num и Denom где хранятся, если класс даже не то, что бы пустой, но и вообще неопределенный?
И дальше:
Вроде это шаблон класса, параметризованный типом _Ratio. Но в определении самого класса _Ratio вообще не используется. Что здесь вообще происходит?
И еще дальше:
Непонятно что в итоге будет означать Length<Mm>. Вот ваще непонятно :(
В третьей строке используется перегруженный оператор +:
Опять вопрос: откуда берутся _Ratio1::den и пр. и где они хранятся?
Попробовал сделать
Получил
wtf?!
Всё просто. Шаблоны — это этам компиляции.
Так что всё что касается шаблонов,
должно быть известно на этапе компиляции.
Компилятор также может производить множество
вычислений на этапе компиляции.
В Вашем случае так и происходит.
Всё что касается ratio вычисляется
компилятором на этапе компиляции.
Определение класса в данном коде не нужно.
Для определения ссылок и указателей
достаточно объявления класса.
А размер объекта такой, потому что
согласно стандарту размер объекта
«пустого» класса не может быть равен нулю.
Не компилируется потому что для sizeof
нужно определение, которого не было.
тоже не должно собираться.
Можете написать мне на email: croessmah(собаченка)cyberforum(точечка)ru