![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| null56 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Всем привет
Разбираюсь с книгой Александреску и пример, который приводит автор ни в какую не хочет собираться
Компилятор gcc Вопрос: 1) почему не хочет собираться? это связано с компилятором или такие фокусы больше не проходят? 2) объясните пожалуйста, зачем автор применяет такой прием
на сколько я понял, всего лишь надо попытаться создать объект локального класса ERROR_##msg и передать его в конструктор класса CompilerTimeChecker, который влезет туда лишь при специализации с агрументом true. То есть нельзя ли было сделать вот так (спрашиваю, потому что не собирается у меня пример)
ЗЫ: я скачал свеженький вариант локи библиотеки, но там уже этот прием не используется, там всё просто
Заранее благодарен за помощь |
||||||||
|
|||||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
1. Хотелось бы увидеть ошибку компилятора. Хотя как минимум одна ошибка известна: нет определения шаблона struct CompilerTimeChecker
есть CompileTimeChecker. И круглые скобочки надо поставить вокруг вызова конструктора. Тогда компилятор перестанет думать что это функция, и sizeof станет корректным. 2. Можно и без и sizeof. Вариант с sizeof чуть более оптимизирован, т.к. не cоздается объекта в программе (вызов конструктора не приводит к созданию объекта, здесь только выражение для оператора sizeof, значение которого вычисляется в процессе компиляции) 3. Ну то же самое. В надежде, что умный компилятор оптимизирует не использующуюся переменную. |
|||
|
||||
| null56 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Вот вывод
Но дело в том, что это происходит, с любым инстанцируемым типом...
укажите пожалуйста, мне кажется скобки уже стоят За это спасибо, теперь понятнее |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
тут Это сообщение отредактировал(а) baldina - 23.8.2010, 14:03 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
в С++ для разрешения неоднозначности все, что выглядит как функция, интерпретируется как функция.
в частности,
...на эти грабли, кажется, каждый наступает хотя бы раз... |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
azesmcar, да, это я проглядел спасибо
baldina, не знал, спасибо огромное, вот и я наступил на эти грабли |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |