1

我在我的类 gTexture 中声明了两个函数:

public:
                               gTexture():mActiveTexture(0){...}
   virtual void                DrawTexture();
   virtual void                DrawTexture(unsigned short int TextureNumber);
           int                 mActiveTexture;

在哪里

void gTexture::DrawTexture()
    {
    gTexture::DrawTexture(mActiveTexture);
    }

我想在一个函数中有这个,比如

virtual void                DrawTexture(unsigned short int TextureNumber=mActiveTexture);

这不会编译,因为 mActiveTexture 是对非静态数据成员的无效使用。有没有办法只拥有一个函数,这会使我的派生对象更容易处理?谢谢。

4

3 回答 3

1

我可以看到两种方式。两者都是解决方法,但可能很有用。

一是使无参函数成为非虚函数;它只会用 . 调用第二个mActiveTexture

0另一种方法是使用领域知识(特别是不是有效的 OpenGL 纹理名称的事实)并执行以下操作:

virtual void DrawTexture(unsigned short int TextureNumber = 0) {
  if (TextureNumber == 0) TextureNumber = mActiveTexture;
  // ... rest of the code
}
于 2013-10-11T14:54:32.690 回答
0

您可能有一个无效的默认参数值(例如 -1)。然后您的函数可以检查该值是否为默认值,如果是,则使用 mActiveTexture,否则将使用该参数。

于 2013-10-11T14:55:04.117 回答
0

不,您不能将成员用作默认值。在编译时使用默认值。

但是,您可以使用特殊值作为默认值,例如 -1,然后检查 DrawTexture(如果输入值为 -1),如果是,则将其设置为 mActiveTexture。

于 2013-10-11T14:57:30.760 回答