我似乎无法在Firefox的HTML5画布中获取onMouseWheel事件.以下代码段在Chrome和IE9中按预期工作,但在Firefox中我只收到click事件:
<!DOCTYPE html>
<html>
<body>
<canvas id="TestCanvas" tabindex="2" onmousewheel="window.alert('wheel!')" onclick="window.alert('click!')" style="width:90%;height:90%;margin-left:auto;margin-right:auto border:1px solid green;"></canvas>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
根据我见过的规范,onMouseWheel应该是HTML5元素的标准事件.难道我做错了什么?
我有一个 std::vector 值,我知道其最大大小,但实际大小在使用过程中会有所不同:
void setupBuffer(const size_t maxSize) {
myVector.reserve(maxSize);
}
void addToBuffer(const Value& v) {
myVector.push_back(v);
if (myVector.size() == maxSize) {
// process data...
myVector.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在 setupBuffer 中,我需要获取指向 myVector 数据开头的指针。我正在使用第三方库,我必须预先缓存该指针,以便在“处理数据...”部分期间进行的调用中使用。
void setupBuffer(const size_t maxSize) {
myVector.reserve(maxSize);
cachePtr(&(myVector[0])); // doesn't work, obviously
}
Run Code Online (Sandbox Code Playgroud)
我不想预先 resize() 向量,因为我想使用 vector.size() 来表示添加到向量中的元素数量。
那么,有什么方法可以在分配(reserve())之后但在它有任何元素之前获取指向向量缓冲区的指针吗?我想象缓冲区存在(并且只要我限制 push_back'd 值的数量就不会移动)......也许这不能保证?
在以下示例中,我得到:
error C2300: 'UnmanagedClass' : class does not have a finalizer called '!SmartPointer'
Run Code Online (Sandbox Code Playgroud)
如果我删除operator->,则此错误消失.有人可以解释为什么会这样吗?
// Unmanaged class.
class UnmanagedClass { };
public ref class SmartPointer {
public:
SmartPointer(UnmanagedClass* u) : m_ptr(u) { }
~SmartPointer() { this->!SmartPointer(); }
!SmartPointer() { delete m_ptr; }
// This line triggers C2300.
UnmanagedClass* operator->() { return m_ptr; }
};
int main() {
SmartPointer^ s = gcnew SmartPointer(new UnmanagedClass);
}
Run Code Online (Sandbox Code Playgroud)