Слово класс в аргументе функции
Первый раз встретил данную конструкцию, когда class в параметрах функции и не могу понять для чего оно используется?
virtual void SetupInputComponent(class UInputComponent* InputComponent) override;
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Эта штука (class UInputComponent) называется elaborated type specifier.
Между UInputComponent и class UInputComponent обычно нет никакой разницы.
Но если UInputComponent еще не был объявлен, то class UInputComponent объявляет его, вместо того, чтобы вызывать ошибку.
Также, class нужен когда название класса совпадает с названием еще чего-то:
class A {};
void foo()
{
int A;
A ptr; // error: must use 'class' tag to refer to type 'A' in this scope
class A ptr; // ok
}
Также использование class убирает необходимость в typename в шаблонах:
struct A
{
class B{};
};
template <typename T = A> struct C
{
T::B y; // error: missing 'typename' prior to dependent type name 'T::B'
typename T::B x; // ok
class T::B y; // ok
};
C c;