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

170
25 марта 2022, 18:50

Первый раз встретил данную конструкцию, когда class в параметрах функции и не могу понять для чего оно используется?

virtual void SetupInputComponent(class UInputComponent* InputComponent) override;

Answer 1

Эта штука ({class|struct|union|enum} имя) называется elaborated type specifier.

Между UInputComponent и class UInputComponent почти нет разницы.

1. Естественно, если справа от class написать не класс, а другой тип - это ошибка.

2. Если UInputComponent еще не был объявлен, то class UInputComponent не вызывает ошибку, а объявляет класс в текущем namespace (даже если мы внутри класса, объявляется все равно не в нем, а в самом вложенном namespace).

Это работает только если имя неквалифицированное (не содержит ::). Если оно квалифицированное и такой класс еще не был объявлен - это ошибка.

3. Elaborated type specifier нужен когда название класса совпадает с названием еще чего-то:

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
}

4. Elaborated type specifier убирает необходимость в 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;

Но typename работает для всех типов, а class - только для классов. Не стоит путать elaborated type specifier с объявлением шаблонных параметров: между template <typename T> и template <class T> разницы нет.

READ ALSO
Оператор in &gt;&gt; в собственном классе строк

Оператор in >> в собственном классе строк

Реализовал класс строк, и сделал оператор >> , когда ввожу строчку с пробелами , например а ааыаыв аы, то выводит только первый символ, то бишь...

107
Qt C++ фильтр для бд

Qt C++ фильтр для бд

необходимо сделать фильтр для бдЕсть поля в них нужно вписать значение, которое потом должно перейти в запрос и вывести результат в tableView

83
Добавление CURL в cmake проект | VS19 | Windows

Добавление CURL в cmake проект | VS19 | Windows

Имею следующий код в CMakeListstxt

167
Настрока компилятора в Qt

Настрока компилятора в Qt

Всем добрый деньСледующая

93