![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| victor79 |
|
|||
|
программист ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
есть класс со множеством различных перегруженных конструкторов. И большой объем использования этого класса. Переделал параметры одного из конструкторов, и думал компилятор мне выдаст все места где он встречается, что бы подправить его вызовы. А он вместо этого все эти вызовы молча залинковал на другой конструктор.
Мысль такая, объявить конструктор-заглушку с прежними параметрами, и туда какую-нибудь директиву, на которую компилятор будет ругаться при попытке скомилить этот вызов. Такое возможно как-нибудь? (директива #error срабатывает на препроцессоре, а не в компиляции - не подходит) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
victor79, сделай конструктор без тела. Тогда линкер начнет материться и будет указано, где происходят вызовы.
|
|||
|
||||
| victor79 |
|
|||
|
программист ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
почти сработало - выдало названия файлов и позицию в виде (.text+0x...) - похоже на смещение в объектнике. Даже если лучшего решения не будет, то это тоже не плохо - есть контроль ошибок, спасибо. (такой метод можно использовать и как перманентный контроль перегрузок параметров...) забыл сообщить, компилятор mingw4.4 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
эхх, а я тебе хотел посоветовать рефакторинг от студии с помидорами... ну, тогда и правда только компилятор/линковщик. Или есть нормальные среды с рефакторингом ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Сыроежка |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: нет Всего: 1 |
Помимо закоментирования тела конструктора, вы можете также сделать этот конструктор закрытым, если до этого он у вас вызывался явно. |
|||
|
||||
| victor79 |
|
|||
|
программист ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
с тем кодом я уже разобрался, еще следуя первому совету - если есть хотя бы контроль, о присутствии ошибок, то их уже все поотыскивать гораздо проще. И на текущий момент это вопрос уже больше теоретический - как легче создавать надежный код. С вариантом private не везде пройдет - в вызовах внутри самого класса не получится. Но в остальных случаях этот вариант лучше - показывается позиция ошибки. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
explicit имеет смысл только для конструкторов с одним аргументом - чтобы не применять этот конструктор как неявный оператор приведения. А у автора скорее всего сработало приведение типов аргументов. Просто не надо плодить лишних конструкторов, особенно таких, которые делают разные вещи, но имеют неявно приводимые типы аргументов.
И вообще в дизайне программ/классов нужно придерживаться минимализма. -------------------- ... |
|||
|
||||
| borisbn |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
подписываюсь
а вот с этим не соглашусь (как-то уже говорили об этом) Если всё грамотно продумано, то чем мешает определение нескольких "сладких" функций в h-нике класса ? Почему, например, было бы плохо, если бы у std::string были бы функции
или
ведь у каждого есть свой велосипед-обёртка над sprintf'ом или stringstream'ом для этого... Почему Вас не смущает std::string::find_last_not_of, а смущает, если бы в векторе была бы сортировка ? И чем Вам не нравится, например, такое ? Не хочешь - не используй... Конечно можно и до маразма довести - конструктор класса строка, вычитывающий строку из файла, класс IPAddress, умеющий пинговать указанный ip-шник и т.п. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||
|
|||||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Ничем, но эти сладкие функции не должны быть частью класса. А кто сказал, что функция find_last_not_of в std::string это произведение искусства? std::string вообще хороший пример того, как не надо проектировать классы пиши "сладкие" функции в отдельном файле в виде свободных функций, кому надо тот включит. Это сообщение отредактировал(а) azesmcar - 14.7.2011, 08:28 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не подскажете где говорилось то ? это как то напрямую связанно с тем, о чем говорила Earnest ?! |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
потому что это не строки забота. строка должна предоставлять два итератора(на начало, и на конец). ИМХО. учились по документации Qt? оно и видно. сплошные blob`ы потому что blob! не использую.
от троллей это вполне ожидаемо |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как класс библиотеки с определенными ограниченными требованиями стерпеть можно, тем более не самый плохой из ее классов.. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |