我在我的班级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无效使用非静态数据成员,因此无法编译。有没有办法只有一个函数,这将使我更容易处理我的派生对象?感谢。
答案 0 :(得分:1)
我可以看到两种方式。两者都是解决方法,但可能有用。
一个是使无参数函数非虚拟;它将始终使用mActiveTexture
调用第二个。
另一种方法是使用领域知识(特别是0
不是有效的OpenGL纹理名称的事实)并执行此操作:
virtual void DrawTexture(unsigned short int TextureNumber = 0) {
if (TextureNumber == 0) TextureNumber = mActiveTexture;
// ... rest of the code
}
答案 1 :(得分:0)
您可以使用无效的默认参数值(例如-1)。然后你的函数可以检查该值是否为默认值,如果是,则使用mActiveTexture,否则它将使用该参数。
答案 2 :(得分:0)
不,您不能将成员用作默认值。默认值在编译时使用。
然而,您可以使用特殊值作为默认值,例如-1,如果输入值为-1,则检查DrawTexture,如果是,则将其设置为mActiveTexture。