
Сообщение от
useruser
Где тип функции?
Давай по пунктам.
1) Ты пишешь функцию:
C++ |
1
| int check_pass (string password); |
|
здесь:
int - это тип возвращаемого значения функции
string - тип аргумента функции.
Здесь понятно?
2) Теперь переходим к типу функции. Вот есть запись:
C++ |
1
| int check_pass (string password); |
|
Это объявление функции. Объявление функции
неявно содержит тип функции.
Т.е. задав функцию, ты сразу же задаешь и ее тип, как head-n-shoulders, в одном флаконе.
Явно тип функции записывается так (задается псевдоним типа через typedef):
C++ |
1
2
3
| typedef int func_type(string); // тип функции с именем func_type, функция возвращает int, принимает string
typedef int(*fync_type_p)(string); // тип указателя на функцию fync_type_p
typedef int(&func_type_r)(string); // тип ссылки на функцию fync_type_r |
|
Получить тип функции из определения функции можно также с помощью ключевого слова decltype. Например вот таким образом можно определить функцию, которая принимает другую функцию:
C++ |
1
2
3
4
5
6
7
8
| int func(std::string v)
{
}
void func1(decltype(func) f)
{
f("test");
} |
|
Вот работоспособный пример в онлайн компиляторе:
http://rextester.com/JRRAW96132
_____
Еще раз для закрепления:
объявление функции неявно в себе содержит тип этой функции.