Слово класс в аргументе функции

Первый раз встретил данную конструкцию, когда 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;
→ Ссылка