При чтении о шаблоне посетителя я столкнулся с этим фрагментом кода:
virtual void visit(class Composite *, Component*) = 0;
Это функция-член, и она кажется, что она объявляет класс Composite
внутри своих параметров. Я пробовал это с нормальной функцией, например:
void accept(class A a);
для некоторого класса A
, который я еще не объявил или не определил, и код работал нормально. Почему это разрешено? Как, если он вообще отличается от прямого объявления перед линией? Что-то изменилось недавно в стандарте в отношении этого?
Многие люди утверждают, что это осталось от C, но тогда почему этот код компилируется в С++, но не C?
#include <stdio.h>
int process(struct A a);
struct A{
int x;
};
int process(struct A a){
return a.x;
}
int main(void)
{
struct A a = {2};
printf("%d", process(a));
return 0;
}