如何更改下面的函子以用作 lambda 包装器?
template<typename T>
class F {
T f;
public:
F(T t){
f = t;
}
T& operator()(){
return f;
}
};
int main()
{
int x = 5;
F<int (*)(int, int)> f( [x](int a, int b){return a+b;} );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器说
error: no matching function for call to 'F<int (*)(int, int)>::F(main()::<lambda(int, int)>)'
F<int (*)(int, int)> f( [x](int a, int b){return a+b;} );
Run Code Online (Sandbox Code Playgroud) 打完电话后glVertexAttribPointer(GLuint index, ...)顶点属性默认情况下禁用的文档说
默认情况下,禁用所有客户端功能,包括所有通用顶点属性数组.
为什么我们必须使用额外功能启用它?有人可以命名一个案例,这有用吗?
在研究时我学到了以下内容:
通过layout(location = x)在GLSL中使用限定符,glBindAttribLocation我们可以显式设置位置,而不是让OpenGL生成它.但这不是我的问题.
glEnableVertexAttribArray不能用于绘制具有多个着色器的一个VAO.当使用程序对象查询属性位置时,可以假设位置是着色器特定的; 然后我们可以预料,我们可以在运行正确的着色器之前启用正确的属性位置.但是,我注意到,在测试时,一个位置值可以在不同的着色器中出现多次; 此外,输出看起来不对.如果您希望查看代码,请询问.
属性位置存储在VAO中.
简而言之,这是一个最小的例子:
struct C {
const int X = 2;
int y = 2;
};
void f(C* x) {
switch(x->y) {
case x->X: printf("%d", 42); break;
case 123: printf("foo");
}
}
int main()
{
C c;
f(&c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器会抱怨error: 'x' is not a constant expression以及如何修复它?