Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2013, 00:38   #21
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

функтор == функция что может принимать в качестве параметра другие функции?
_SOKOL_ вне форума Ответить с цитированием
Старый 04.02.2013, 00:39   #22
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

что то туплю :-(
лучше пойду спать
_SOKOL_ вне форума Ответить с цитированием
Старый 04.02.2013, 00:40   #23
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
_Bers, спасибо за детальное разъяснение) Да, такой синтаксис, пожалуй, удобнее и интуитивнее, если мы хотим проверить конкретную вызываемую сигнатуру. Я имел в виду проверку именно вызова с такими аргументами, не используя тип возвращаемого значения.
Поясните, почему enum { value = true; } лучше, чем static const bool value = true?
Вычисляется тоже во время компиляции, и выглядит интуитивнее, как мне кажется.
enum - константа, гарантированно времени компиляции. И так же гарантируется, что под неё не будет выделено памяти.

А вот статическую константу можно запросто ничайно засадить в статическую память. И будет эта константа там жить все время приложения. А нафига это надо?

Так то.. если все делать аккуратно - то наверное дело вкуса, а смысл тот же
_Bers вне форума Ответить с цитированием
Старый 04.02.2013, 00:40   #24
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

спасибо за объяснения :-)
_SOKOL_ вне форума Ответить с цитированием
Старый 04.02.2013, 00:47   #25
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
enum - константа, гарантированно времени компиляции. И так же гарантируется, что под неё не будет выделено памяти.

А вот статическую константу можно запросто ничайно засадить в статическую память. И будет эта константа там жить все время приложения. А нафига это надо?

Так то.. если все делать аккуратно - то наверное дело вкуса, а смысл тот же
Понял, спасибо.
Единственное, что мне здесь не нравится - я так понимаю, происходит неявное преобразование bool -> char/short/int? Насколько я помню, в качестве значений для перечислений именно последние используются.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 04.02.2013, 01:00   #26
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Понял, спасибо.
Единственное, что мне здесь не нравится - я так понимаю, происходит неявное преобразование bool -> char/short/int? Насколько я помню, в качестве значений для перечислений именно последние используются.
enum это на самом деле синтаксический сахар над int
поэтому буль будет преобразовываться в int

Но поскольку константа времени компиляция, то это будет преобразование времени компиляции, а не в рантайме. енум будет либо 1, либо 0

Можно смело пихать в условные выражения, или писать записи вида:
Код:
const bool success = is_callable<decltype(obj)>::value;
Сам я перенял такую манеру использовать енумы, когда изучал библиотеку Локи у Александресску
_Bers вне форума Ответить с цитированием
Старый 04.02.2013, 01:03   #27
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

ТО, что всёв compile-time происходит, я понимаю, да. Не нравится только сам факт неявного преобразования, ну да ладно)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 04.02.2013, 09:14   #28
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

_Bers, сейчас всё понятно))
но я не понял в этой строке:
Код:
const int val2 = is_callable<void (*)(void), void>::value;
что это за запись такая:
Код:
void (*)(void)
и здесь
Код:
const int val4 = is_callable<Functor, int>::value;
не подходит потому что у функтора тип возврата void а принемает int?
после школы посмотрю что могу...
_SOKOL_ вне форума Ответить с цитированием
Старый 04.02.2013, 10:10   #29
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от _SOKOL_ Посмотреть сообщение
_Bers, сейчас всё понятно))
но я не понял в этой строке:
Код:
const int val2 = is_callable<void (*)(void), void>::value;
что это за запись такая:
Код:
void (*)(void)
void (*)(void) - так объявляется тип данных "указатель на функцию".

Данный указатель можно нацелить на свободную функцию, которая ничего не возвращает, и не принимает аргументов. Например вот на такую: void Bar(){}


На языке с++ можно получать адрес твоих функций и запускать их по указателю, а не по имени.

Пример:

http://liveworkspace.org/code/2sz7PZ$6


Цитата:
Сообщение от _SOKOL_ Посмотреть сообщение
и здесь
Код:
const int val4 = is_callable<Functor, int>::value;
не подходит потому что у функтора тип возврата void а принемает int?
после школы посмотрю что могу...
const int val4 = is_callable<Functor, int>::value;
Будет равен 1, только если у функтора есть operator()(int){}
Но так как в примере в функтора оператор ничего не принимает, то выражение должно стать равным нулю.

Последний раз редактировалось _Bers; 04.02.2013 в 10:15.
_Bers вне форума Ответить с цитированием
Старый 04.02.2013, 10:49   #30
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Кстати, _Bers, как написать саму реализацию без вариадиков - я не представляю) (разумеется, если не делать по реализации на каждое число аргументов до N)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с чего начиНАТЬ С/С++!!!! dk118 Помощь студентам 0 05.12.2012 01:22
С чего начинать leonidsm Свободное общение 4 06.10.2012 19:37
Какой язык лучше всего выбрать после завершения изучения языка Паскаль. VektorAB Помощь студентам 4 09.07.2010 07:16
С чего начинать? Shadol Свободное общение 6 24.11.2009 11:46
С++ ЧЕГО НАЧИНАТЬ !!! geniy Общие вопросы C/C++ 12 03.09.2007 10:50