![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Здравствуйте.
Следующий код
http://liveworkspace.org/code/3b891bff696e...89efd162fb93933 выдаёт ошибку
Причём, если закомментировать все "void"-функции и раскомментировать "float", то всё работает. Не могу понять, это какой-то глюк или всё так и должно быть ? Как обойти это - я уже нашёл (SFINAE = enable_if + is_void), но хотелось бы понять, в чём здесь дело. Спасибо. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Все же void(T) и void(void) это немного разные вещи, void(void) - это тот же void() и компилятор не может найти шаблонную функцию. Почему бы не сделать вот так? http://liveworkspace.org/code/aed04e13fed1...0d5547b7322db45 или можно через перегрузку http://liveworkspace.org/code/0a23eab68ffd...dce71a6127f0cad Это сообщение отредактировал(а) azesmcar - 28.2.2012, 11:54 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
все равно не понимаю, почему не работает вариант borisbn`а...
Это сообщение отредактировал(а) boostcoder - 28.2.2012, 12:05 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ааа, въехал!
![]() ну да, <void> и <void(void)> это же разные типы) |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
azesmcar, спасибо. Первый вариант мне не подходит, т.к. в первую функцию можно подать функцию, принимающую два аргумента или возвращающую не void, а вот второй - то, что надо. Как-то я не сообразил, что специализация, с одной стороны - это та же перегрузка, но с другой стороны налагает некоторые ограничения.
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
неа. у меня там не void и void(void), а void( T ) и void(). мдаааа. а вот такая специализация работает:
http://liveworkspace.org/code/296038cd2a53...57b051b93d6fb7a хотя, на первый взгляд, это - вещи похожие -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
не знал... так по этому нельзя перегружать функции, если они отличаются только возвращаемым значением... и всё равно остаётся непонятным - чем принципиально следующий код отличается от первого?
http://liveworkspace.org/code/bc1be32edad9...1518a7d69366a42 будем считать, что std::vector в данном примере - это std::function в первом... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
borisbn
Вот пример попроще.
компилятор пытается найти функцию foo с таким параметром, но не находит. Это сообщение отредактировал(а) azesmcar - 28.2.2012, 15:06 |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
кстати да, вспомнил про обсуждение на некотором форуме.
|
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
кажется начинаю понимать: если в параметрах функции указано энное количество аргументов (пусть и шаблонных), то все специализации обязаны поддержать эту сигнатуру, а void - это не такой же тип, как и все остальные, а отсутствие параметра.
Вот пример ещё проще
http://liveworkspace.org/code/d632e6c8ba6b...75ff271d1374f59 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |