这在D中不起作用:
void doSomething(auto a, auto b){
// ...
}
Run Code Online (Sandbox Code Playgroud)
我只是好奇,这会不会有用?或者这在技术上是不可能的?(或者只是简单的愚蠢?)
无论如何,这可以通过任何其他方式完成吗?我想我可以使用...并查看参数列表,但我有点为懒惰的新手制作一个库,并希望它们能够轻松地创建函数而无需真正关心数据类型.我正在玩创建一个名为varlike 的结构的想法
struct var{
byte type;
void* data
// ...
}
// and overload like all operators so that a lazy devver can do
var doSomething(var a, var b){
if(a == "hello")
b = 8;
var c = "No.:" ~ b ~ " says:" ~ a;
return c;
}
Run Code Online (Sandbox Code Playgroud)
但我的脑袋已经开始受伤了.而且,我有点觉得我错过了什么.我也痛苦地意识到这可能是模板的用途......是吗?从我知道的一点点,模板看起来像这样(?)
void doSomething(T, U)( T a, U b){
// ...
}
Run Code Online (Sandbox Code Playgroud)
但现在它看起来不那么干净了.也许我已经倒退了所有这些.也许我的困惑源于我的信念,这auto是一种动态类型,可与var我的javascript 相媲美,但实际上,它还有其他什么? …
我想在OSX上以高分辨率和高帧率获得鼠标移动.
"高帧率"= 60fps或更高(优选> 120)
"高分辨率"=子像素值
问题
我有一个大约在显示器刷新率下运行的opengl视图,所以它是~60 fps.我用鼠标环顾四周,所以我隐藏了鼠标光标,我依赖鼠标delta值.
问题是鼠标事件的帧速率太低,值被捕捉到整数(整个像素).这会导致"波涛汹涌"的观看体验.以下是鼠标增量值随时间变化的可视化:
mouse delta X
^ xx
2 | x x x x xx
| x x x x xx x x x
0 |x-x-x--xx-x-x-xx--x-x----x-xx-x-----> frame
|
-2 |
v
Run Code Online (Sandbox Code Playgroud)
这是用户将鼠标稍微向右移动而创建的典型(缩短)曲线.每个x代表每个帧的deltaX值,并且由于deltaX值四舍五入为整数,因此该图实际上非常准确.我们可以看到,deltaX值将是0.000一帧,然后是1.000,然后它将再次为0.000,然后是2.000,然后再次为0.000,然后是3.000,0.000,依此类推.
这意味着视图将在一帧中旋转2.000个单位,然后在下一个旋转0.000个单位,然后旋转3.000个单位.当鼠标以或多或少的恒定速度拖动时会发生这种情况.不用说,这看起来像垃圾.
那么,我怎样才能增加鼠标的事件帧率?2)获取子像素值?
到目前为止,
我已经尝试了以下内容:
- (void)mouseMoved:(NSEvent *)theEvent {
CGFloat dx, dy;
dx = [theEvent deltaX];
dy = [theEvent deltaY];
// ...
actOnMouse(dx,dy);
}
Run Code Online (Sandbox Code Playgroud)
嗯,这个很明显.dx这里是浮点数,但值总是四舍五入(0.000,1.000等).这将创建上面的图形.
所以下一步是在进入WindowServer之前尝试点击鼠标事件,我想.所以我创建了一个CGEventTrap:
eventMask = (1 << kCGEventMouseMoved);
eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap,
0, eventMask, myCGEventCallback, NULL);
//...
myCGEventCallback(...){ …Run Code Online (Sandbox Code Playgroud) 当我将'this'传递给匿名函数时:
MyClass.prototype.trigger = function(){
window.setTimeout(function(){this.onTimeout();},1000);
}
Run Code Online (Sandbox Code Playgroud)
我得到一个"this.onTimeout不是一个函数" - 错误.我想在匿名函数执行时'this'不再可用了吗?所以我一直这样做:
MyClass.prototype.trigger = function(){
var me = this
window.setTimeout(function(){me.onTimeout();},1000);
}
Run Code Online (Sandbox Code Playgroud)
这真的是你应该做的事情吗?它有点工作,但感觉很奇怪.
然后我们有这个例子:
$(function(){
function MyClass(){
this.queue = new Array();
}
MyClass.prototype.gotAnswer = function(count){
$('body').append("count:"+count+"<br/>");
}
MyClass.prototype.loadAll = function(){
var count = 0;
var item;
while(item = this.queue.pop()){
count++;
var me = this;
$.getJSON("answer.html",{},function(data){me.gotAnswer(count);});
}
}
var o = new MyClass();
o.queue.push(1);
o.queue.push(2);
o.loadAll();
});
Run Code Online (Sandbox Code Playgroud)
这输出:
2
2
Run Code Online (Sandbox Code Playgroud)
不应该输出:
1
2
Run Code Online (Sandbox Code Playgroud)
代替?然后我发现将$ .getJSON语句放在另一个函数中使它全部工作:
MyClass.prototype.loadAll = function(){
var count = 0;
var item;
while(item …Run Code Online (Sandbox Code Playgroud) 我想在D中创建一个像这样工作的向量结构:
vec u, v;
vec w = [2,6,8];
v.x = 9; // Sets x
v[1] = w.y; // Sets y
u = v; // Should copy data
Run Code Online (Sandbox Code Playgroud)
后来我也想添加类似的东西u = v * u.但是上面的内容现在也可以.
这是我走了多远:
struct vec3f
{
float[3] data;
alias data this;
@property
{
float x(float f) { return data[0] = f; }
float y(float f) { return data[1] = f; }
float z(float f) { return data[2] = f; }
float x() { return data[0]; }
float y() …Run Code Online (Sandbox Code Playgroud)