![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
есть шаблон:
в таком виде вхожу в рекурсию. как разрулить? спасибо. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
указание полной квалификации имени не подходит ?
для глобального пространства ::apply Это сообщение отредактировал(а) mes - 8.8.2011, 00:40 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, это что/как?
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Может так?
::apply(a, v); упс... опередили... Это сообщение отредактировал(а) volatile - 8.8.2011, 00:42 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
говорит что нет такой функции. Добавлено через 1 минуту и 37 секунд кстати, шаблон в пространстве имен. а функция нет. хотя по идее может... зависит от юзера. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
и функция шаблонная.
Добавлено @ 00:51 volatile, попробую воспроизвести.. Это сообщение отредактировал(а) boostcoder - 8.8.2011, 00:55 |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Воспроизвёл:
выход:
Добавлено через 2 минуты и 39 секунд А, понятно. |
||||
|
|||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
volatile, на основе твоего кода и воспроизвел:
http://liveworkspace.org/code/656467edfa39...f2749d7aa32a974
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
поменяйте местами структуру и функцию, или просто добавьте перед структурой прототип.. Это сообщение отредактировал(а) mes - 8.8.2011, 01:27 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
boostcoder, у меня студия здесь щас запущена. Там компилится без проблем.
На gcc видимо надо соблюдать очередность... хых http://liveworkspace.org/code/e991d266116e...7770b9e8f27a082 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
эм.. дело в том, что я использую SFINAE чтоб определить, задекларина ли эта функция. если я добавлю декларацию, то SFINAE постоянно будет говорить что функция имеется... как быть? Добавлено через 1 минуту и 9 секунд нельзя. уже описал почему. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
boostcoder
А каким образом предполагается вызывать функцию, которая на момент вызова не задеркларирована? Если именно функция apply не может быть задекларирована выше, то можно написать прототип функции под другим именем (какой нибудь call_apply), который будет вызывать эту функцию, и определить его ниже. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
boostcoder, если задекларировать раньше, то она ведь работает. http://liveworkspace.org/code/702e65089983...9615fb52762eb00 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вот как это дело организовано в проекте:
http://liveworkspace.org/code/217bf61f3fc5...d67bad0729fa6b7 я так понимаю: компилятор знает про специализированный шаблон type еще ДО того как он понимает где эту специализацию использовать. так же, к моменту когда он это понимает, он уже и знает о функции apply(). но почему он говорит? :
Это сообщение отредактировал(а) boostcoder - 8.8.2011, 12:49 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
в 26`ой строке.
ведь компилятор только при нахождении соответствующей специализации пытается вызвать функцию. или что? Добавлено через 4 минуты и 45 секунд azesmcar, смотри такой пример:
http://liveworkspace.org/code/fcd5aff8eff3...fe2744c0a621bf3 я всего лишь переименовал free-функцию, и проблема решилась. так что тут проблема не в том где функция объявлена. Добавлено через 5 минут и 26 секунд и попробуй любую из единиц изменить на нолик. Добавлено через 6 минут и 12 секунд т.е. проблема по всей видимости в том, что имя free-функции совпадает с именем статической функции члена. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
придется переименовывать
|
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
кстати, если указать что функция в глобальном неймспейсе, то так же говорит:
Это сообщение отредактировал(а) boostcoder - 8.8.2011, 14:01 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
я б не спешил.. интуиция настойчиво шепчет, что подобный прием может привести к нежелательным последсвиями.. и в частности к разным инстанциям при одних и тех же шаблонных аргументах, но разном окружающем контексте.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
рефакторинг очень часто имеет такие последствия |
|||
|
||||
| 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. |