下面是访问实例的受保护字段x的一个微妙示例.B是A的子类,因此B类型的任何变量也是A类型.为什么B :: foo()可以访问b的x字段,而不是a的x字段?
class A {
protected:
int x;
};
class B : public A {
protected:
A *a;
B *b;
public:
void foo() {
int u = x; // OK : accessing inherited protected field x
int v = b->x; // OK : accessing b's protected field x
int w = a->x; // ERROR : accessing a's protected field x
}
};
Run Code Online (Sandbox Code Playgroud)
这是我用g ++得到的错误
$ g++ -c A.cpp
A.cpp: In member function ‘void B::foo()’:
A.cpp:3: error: ‘int A::x’ is …Run Code Online (Sandbox Code Playgroud) 无论我放入什么,.gitignore我都无法得到git忽略UserInterfaceState.xcuserstate下面的文件:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
modified: CalFoo.xcodeproj/project.xcworkspace/xcuserdata/wcochran.xcuserdatad/UserInterfaceState.xcuserstate
Run Code Online (Sandbox Code Playgroud)
我正在使用/编辑此帖子中.gitignore列出的文件.我尝试了一切以匹配模式,包括确切的路径名:无济于事.CalFoo.xcodeproj/project.xcworkspace/xcuserdata/wcochran.xcuserdatad/UserInterfaceState.xcuserstate
这个特殊问题源于使用Xcode创建初始git repo并且之后添加.gitignore来自此处的文件的工作流程.从这个问题中可以找到忽略git中先前跟踪文件的更一般的答案(我想我在搜索中从未找到过这个帖子,因为它在标题中没有"gitignore").
无论如何要匹配Xcode的组织者或在线开发者网站中的配置文件与Xcode的代码签名首选项下给出的疯狂序列号/ ID号码?

我想确保我使用正确的(Ad Hoc)配置文件构建我的应用程序 - Xcode给了我一个很长的ID(如上所示),但是在线开发者网站和列出我的配置文件的Xcode首选项"列出这个号码.
我在JS中使用回溯编写了一个简单的数独求解器.为了"纯粹功能化",我的所有9x9益智数组都是不可变的,因此每当插入新数字时都会创建一个新数组.
new SudokuPuzzle在第一个版本中,我使用new Puzzle(puzzle)克隆对象的方法:
function SudokuPuzzle(obj) {
if (obj instanceof SudokuPuzzle) {
this.grid = obj.grid.slice(0); // copy array
} // ...
}
Run Code Online (Sandbox Code Playgroud)
然后每当我更新数组时,我都会执行以下操作:
SudokuPuzzle.prototype.update = function(row, col, num) {
var puzzle = new SudokuPuzzle(this); // clone puzzle
puzzle.grid[row*9 + col] = num; // mutate clone
return puzzle; // return clone
}
Run Code Online (Sandbox Code Playgroud)
Object.create()我编写了另一个版本,我使用的是另一个版本,Object.create()并且sudokuPuzzle我继承了一个基础对象来创建新的谜题.这是clone()方法:
sudokuPuzzle.clone = function() {
var puzzle = Object.create(this); // create puzzle from sudokuPuzzle
puzzle.grid = this.grid.slice(0); …Run Code Online (Sandbox Code Playgroud) 我正在实现一个简单的iOS纸牌游戏,允许用户以通常的方式拖动卡片.这些卡用UIView子类表示CardView.所有卡片视图都是兄弟姐妹,是子视图SolitaireView.以下代码片段尝试"将卡片放在前面",以便在拖动时它位于所有其他视图上方:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view.tag == CARD_TAG) {
CardView *cardView = (CardView*) touch.view;
...
[self bringSubviewToFront:cardView];
...
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,卡片的z顺序在拖动过程中保持不变.在下面的图片中,我拖着国王.请注意它在左图像中的九个顶部是正确的,但在右图像中的两个(实际上在整个堆栈下)不正确:

我也试过改变layer.zPosition房产也无济于事.如何在拖动过程中将卡片视图置于正面?我很神秘.
下面是一个GLSL片段着色器,如果给定的纹理坐标位于框内,则输出纹素,否则输出颜色.这只是感觉愚蠢,必须有一种方法来做到这一点没有分支?
uniform sampler2D texUnit;
varying vec4 color;
varying vec2 texCoord;
void main() {
vec4 texel = texture2D(texUnit, texCoord);
if (any(lessThan(texCoord, vec2(0.0, 0.0))) ||
any(greaterThan(texCoord, vec2(1.0, 1.0))))
gl_FragColor = color;
else
gl_FragColor = texel;
}
Run Code Online (Sandbox Code Playgroud)
下面是没有分支的版本,但它仍然感觉笨拙."纹理坐标夹紧"的最佳实践是什么?
uniform sampler2D texUnit;
varying vec4 color;
varying vec4 labelColor;
varying vec2 texCoord;
void main() {
vec4 texel = texture2D(texUnit, texCoord);
bool outside = any(lessThan(texCoord, vec2(0.0, 0.0))) ||
any(greaterThan(texCoord, vec2(1.0, 1.0)));
gl_FragColor = mix(texel*labelColor, color,
vec4(outside,outside,outside,outside));
}
Run Code Online (Sandbox Code Playgroud)

我将纹素夹在区域中,标签是 - 在这种情况下,纹理s&t坐标将介于0和1之间.否则,我使用棕色,而标签不是.
请注意,我还可以构建代码的分支版本,在不需要时不执行纹理查找.这会比总是执行纹理查找的非分支版本更快吗?也许是时候进行一些测试......
OpenGL像素/片段在概念上是以半整数像素为中心的1x1个正方形.OpenGL 4.5规范声明:
片段位于其左下角,位于整数网格坐标上.光栅化操作也指一个片段的中心,它从左下角偏移(1/2,1/2)(因此位于半整数坐标上).
光栅化器通常假设像素中心位于整数网格上.由于我试图实现正确的OpenGL三角形填充,我想知道以下程序是否合理.
让我们看一个带有剪裁坐标(-1,-1),(+ 1,-1),(0,+ 1)的三角形的简单情况,如下图所示(假设正投影,z = 0) ).假设我们有一个(小的5x5帧缓冲区),我们将三角形映射到via,glViewport(0,0,5,5)如右图所示,在设备坐标中产生三角形,顶点为(0,0),(5,0),(2.5,5).

如您所见,光栅化器应生成三角形内部的13个片段(图像中的阴影像素).请注意,片段中心位于半整数坐标上.要实现OpenGL规范,这就是结果需要的结果.
扫描线多边形填充将确定扫描线与三角形相交的x跨距,但扫描线为半整数y值,如下图所示:

硬件/固件光栅化器将假设像素中心位于整数网格上,因为这是执行填充的最有效方式.在下图中,我将三角形的设备坐标移动了(-0.5,-0.5),将中心放在整数网格上:

请注意,像素中心现在确实在整数网格上.在传递给片段着色器之前,这个光栅化器只会向每个片段中心添加(0.5,0.5).至少这是我的计划.
处理纹理坐标似乎是直截了当的.想象一下,我分配了纹理坐标(0,0),(1,0),(0.5,1),如下所示.左边的图像使用半整数像素中心(OpenGL方式),右边的图像使用整数像素中心(硬件方式).纹理坐标(任何附加的片段属性)最终都有相同的值 - 即,没有什么特别需要做的.

我的方法看起来是否正确?
以下bash和Perl脚本神秘地给出了不同的结果.为什么?
#!/bin/bash
hash=`echo -n 'abcd' | /usr/bin/shasum -a 256`;
echo $hash;
#!/usr/bin/perl
$hash = `echo -n 'abcd' | /usr/bin/shasum -a 256`;
print "$hash";
Run Code Online (Sandbox Code Playgroud)
bash脚本:
$ ./tst.sh
88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589 -
Run Code Online (Sandbox Code Playgroud)
Perl脚本:
$ ./tst.pl
61799467ee1ab1f607764ab36c061f09cfac2f9c554e13f4c7442e66cbab9403 -
Run Code Online (Sandbox Code Playgroud)
哎?
我想通过添加适当的退化四边形将下图中的五个四边形条带(下面指定为黑色索引)转换为单个四边形条带.增加的灰色指数似乎可以解决问题,但我想知道是否有更紧凑的方式.

给定两个 3xK 矩阵,我希望计算逐列点积的平方平均值。这可以通过一个简单的循环来完成:
Eigen::Matrix<float,3,Eigen::Dynamic> L(3,K);
Eigen::Matrix<float,3,Eigen::Dynamic> P(3,K);
float distance = 0;
for (int q = 0; q < K; q++){
const Eigen::Vector3f& line = L.col(q);
const Eigen::Vector3f& point = P.col(q);
const float d = line.dot(point);
distance += d*d;
}
const float residual2 = distance / K;
Run Code Online (Sandbox Code Playgroud)
其性能优于 ( g++ -O3 -DNDEBUG) 更高级的缩减技术,例如:
const float residual2 = (L.array() * P.array()).colwise().sum().square().mean();
const float residual2 = L.cwiseProduct(P).array().colwise().sum().array().square().mean();
const float residual2 = (L.transpose() * P).diagonal().array().square().mean();
Run Code Online (Sandbox Code Playgroud)
也许我在这里缺少一些东西。削减不是应该更快吗?
编辑:使用 K = 20。我执行上述 100*632*631 次,循环版本大约需要 1200 …