void F(void f(), void(*v)())
{
}
Насколько я понимаю, два параметра имеют одинаковый тип, оба являются указателями на функцию, которая ничего не берет и возвращает void
. Что это за два способа написания? Если они оба - одно и то же, то почему void f()
не так популярен, как void(*f)()
? Первый выглядит проще, так как выглядит так, как пишутся нормальные функции. Также какой синтаксис можно использовать при работе с указателями на функции? Или где их найти? Вот некоторые из них, которые мне удалось получить:
#include <iostream>
#include <vector>
void func1()
{
std::cout << "func1\n";
}
void (*returnFunc1())()
{
return func1;
}
auto returnFunc1_2() -> void(*)()
{
return func1;
}
void func2(int x)
{
std::cout << "func2 " << x << "\n";
}
auto returnFunc2() -> void(*)(int)
{
return func2;
}
int func3(int, bool)
{
std::cout << "func3\n";
return 0;
}
int (*returnFunc3(long long))(int, bool)
{
return func3;
}
void func4(void f(), void(*v)())
{
std::cout << "func4\n";
}
void (*returnFunc4())(void(), void(*)())
{
return func4;
}
int main()
{
void (*funcPointer)() = func1;
funcPointer();
std::vector<void(*)()> v;
v.push_back(func1);
v.back()();
returnFunc2()(123);
returnFunc3(123)(456, true);
returnFunc4()(func1, func1);
}
Можно ли использовать какой-либо другой синтаксис? Мне просто любопытно.
Например, что означает int (*(*foo)(void ))[3]
? Как читать такие высказывания? Или где я могу узнать о прочтении таких крипт c заявлений?