虚幻引擎生成以下功能:

void AFlyingPawn::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
    //stuff...
}

注意参数类型之前的“class”说明符。这是什么意思?

最佳答案

虚幻如何工作

您可能知道,虚幻引擎管理相同类的多个实现,以定义共同点。然后,每个开发人员必须从引擎必须提供的子类中创建子类,以便在引擎中执行任务。

在这种情况下,它涉及一个InputComponent,用于处理用户输入,解释它并将其传递给Controller和/或随后的Pawns。

例如,如果您要定义Pawns,PlayerControllers,AIControllers,HUD等元素,则可以在GameMode中进行配置,然后将其配置为Project Settings或直接通过World Settings配置为关卡(以防万一)您的等级需要特定的GameMode)。这些引用也是类,这些类将在适当的时候由引擎实例化以设置游戏。

陷阱来了

考虑到这一点,不利之处就在这里。在UE4 C++中(是的,这是一件事情!),因为引擎将松散的东西联系在一起,所以有时您将无法使用某些类,因为它们没有被声明。当然,您可以包括它们,但要考虑一下:如果仅对一个类进行查找就需要所有包含,那么将创建多少个循环依赖项,从而可能间接要求一个类?

解决方案是转发声明。但是,这种情况是一种特殊的样式,称为速记向前声明,在其中您可以在使用该类的确切位置声明一个类型。

如果只使用一次,这将非常方便,因此在文件开始时,您不会得到可怕的声明列表。

将其带入现实世界

例如,如果您想知道当前定义的默认Pawn类,则可以在GameMode中检查GetDefaultPawnClass公共(public)变量(我们将其称为MyGameMode)。变量定义如下:

TSubclassOf < APawn > DefaultPawnClass

看到那个TSubclassOf吗?实际上,这是确保类型安全的类模板。实际上,这是对编辑器的提示,它仅向您显示从APawn派生的类。

如果您使用自定义类型并且基于到目前为止我一直在讨论的内容,那么您会发现类似以下内容:
TSubclassOf<class ASpeedyPawn> MySpeedyPawn;

关于c++ - “class”在参数之前是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41312056/

10-11 23:07