在followint代码中,指针转换和多继承如何一起发挥作用?
class Foo {
public:
virtual void someFunc();
};
class Bar;
void someWork(Bar *bar) {
((Foo*) bar)->someFunc();
}
class Bar: public Zed, public Foo {
...
virtual void someFunc() { ... do something else ... }
}
Bar bar;
int main() {
someWork(&bar);
}
Run Code Online (Sandbox Code Playgroud)
我的理解有点不稳定.
一方面,有些工作对Bar一无所知,所以这不应该工作; 但另一方面,我已经向前宣布了Bar.
谢谢!
c++ virtual-functions multiple-inheritance forward-declaration
在C++中是否有一种方法可以创建一个匿名命名空间,并且只从中导出一个函数?
我想要的东西:
namespace {
void Bar() {}
void Foo() { Bar(); }
}
Run Code Online (Sandbox Code Playgroud)
现在,我想以某种方式访问,Foo()但确保没有办法触摸Bar()
谢谢!
橙皮书第16.2节列出了实施漫射照明:
void main()
{
vec3 N = normalize(gl_NormalMatrix * gl_Normal);
vec4 V = gl_ModelViewMatrix * gl_vertex;
vec3 L = normalize(lightPos - V.xyz);
gl_FrontColor = gl_Color * vec4(max(0.0, dot(N, L));
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我移动相机时灯光会发生变化.另一方面,当我改变
vec3 N = normalize(gl_NormalMatrix * gl_Normal);
Run Code Online (Sandbox Code Playgroud)
to vec3 N = normalize(gl_Normal);
我获得了像固定管道一样工作的漫射光.
什么是gl_NormalMatrix,删除它做了什么,...这是橙皮书中的一个错误......还是我不正确地设置我的OpenGl代码?
[为完整起见,片段着色器只复制颜色]
假设我有:
Foo foo;
Run Code Online (Sandbox Code Playgroud)
这是一个简写吗?
foo.operator->().operator()(1, 2);
Run Code Online (Sandbox Code Playgroud)