【问题标题】:c++ Defining static class functionc++定义静态类函数
【发布时间】:2015-07-14 03:23:07
【问题描述】:

我有这个 c++ 代码:

static class UEnum* EViewModeIndex_StaticEnum()
{
    static class UEnum* Singleton = NULL;
    if (!Singleton)
    {
        ...
    }
return Singleton;
}

此代码是可正确编译和运行的游戏引擎的一部分。但是,我不明白第一行和第三行中“类”的含义。

【问题讨论】:

  • 你的意思是说你不了解面向对象编程中的类是什么,或者仅在这个程序的上下文中你无法理解类是什么?
  • 我有面向对象编程的知识。我没有在文献或互联网上找到在这种情况下使用“类”。

标签: c++ function class


【解决方案1】:

当您拥有class A 时,您可以使用class A 来声明变量、返回类型或参数类型。这与出于相同目的仅使用 A 相同。在这种情况下,使用class 是多余但合法的。

class A
{
   // ...
};

void foo()
{
   // Create an instance of A using the simple syntax.
   A f1;

   // Create an instance of A using the redundant class keyword
   // Use of class is redundant but legal.
   class A f2;
}

但是,在某些情况下,有必要使用 class/struct 关键字来消除同名函数与 class/struct 名称的歧义。

来自 C++11 标准:

9.1 类名

...

类声明将类名引入声明它的作用域,并将该名称的任何类、变量、函数或其他声明隐藏在封闭作用域中(3.3)。如果在一个范围内声明了一个类名,其中还声明了一个同名的变量、函数或枚举器,那么当两个声明都在范围内时,只能使用详细类型说明符 (3.4.1) 来引用该类。 4)。 [ 例子:

struct stat {
     // ...
  };

 stat gstat;   // use plain stat to
               // define variable

 int stat(struct stat*);   // redeclare stat as function
 void f() {
   struct stat* ps;        // struct prefix needed
                           // to name struct stat
   stat(ps);               // call stat()
}

——结束示例 ]

【讨论】:

  • 谢谢,帮了大忙。
【解决方案2】:

这是一个static 函数。 classUEnum 同在。这个静态函数的返回类型是class UEnum*。但通常,我们不在这里写类。所以它等价于static UEnum* EViewModeIndex_StaticEnum()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多