小编zac*_*caj的帖子

为什么fwrite的写作比我说的要多?

FILE *out=fopen64("text.txt","w+");
unsigned int write;
char *outbuf=new char[write];
//fill outbuf
printf("%i\n",ftello64(out));
fwrite(outbuf,sizeof(char),write,out);
printf("%i\n",write);
printf("%i\n",ftello64(out));
Run Code Online (Sandbox Code Playgroud)

输出:

0
25755
25868
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?write设置为25755,我告诉fwrite将多个字节写入文件,这是在开头,然后我在25755以外的位置?

c file fwrite ftell

13
推荐指数
1
解决办法
1万
查看次数

Swift从泛型类型继承

我试图从泛型类型继承,以便我可以在层次结构中插入一个类型:

class Foo < T:AnyObject > : T {}
Run Code Online (Sandbox Code Playgroud)

但我得到错误

inheritance from non-protocol, non-class type 'T'
Run Code Online (Sandbox Code Playgroud)

但我确保T是一个类(即使我将AnyObject更改为其他类).这不可能吗?

generics swift

13
推荐指数
1
解决办法
2534
查看次数

何时应该在堆栈而不是堆上分配类

在过去,每当我需要创建一个类的实例时,我都会使用new在堆上分配它(除了stl类和数学类,如vec3和mat4).

但是,我只是批评我的一些代码,并意识到技术上我可以只是在堆栈上制作这些类.它们不是很大,不需要在当前范围之外进行修改等.当我(偶尔)需要将它们传递给另一个函数时,我可以像使用指针一样轻松地使用引用.

在过去,我总是默认在堆上进行分配,并且在某些情况下仅使用堆栈,但是现在我想知道默认情况下在堆栈上分配是否更好,并且仅在使用堆时

  • 确实需要一个指针(即对象的生命周期超出声明范围)
  • 类或数组对于堆栈来说太大了
  • 继承需要它(抽象基类/接口)
  • 别的什么?

这也提出了一个问题:一个类有多大(大致)在堆栈上合理分配?(假设我们正在努力,至少是智能手机,并进入高端桌面)我只是担心不必要的堆栈大小限制?(可能,只要我们不讨论大型数组,并且没有类甚至接近千字节)

c++

11
推荐指数
2
解决办法
2852
查看次数

在C + MinGW32中使用64位地址执行文件操作

我试图在C中读取24 GB的XML文件,但它不起作用.当我读到它时,我正在使用ftell()打印出当前位置,但是一旦它达到足够大的数字,它就会回到一个小数字并重新开始,甚至从未获得20%的文件.我认为这是用于存储位置(长)的变量范围的问题,根据http://msdn.microsoft.com/en-us/library/s3f49ktz(VS),它可以达到大约4,000,000,000..80).aspx,而我的文件大小为25,000,000,000字节.一个很长的长期应该工作,但我怎么能改变我的编译器(Cygwin/mingw32)使用或得到它有fopen64?

cygwin mingw large-file-support

9
推荐指数
1
解决办法
1398
查看次数

如何在C#中处理多个相同的类

我正在使用一个客户端的API,它有多个不同的"服务"(到目前为止大约10个),每个都作为自己的命名空间导入.它们的标准API调用模式的一部分涉及返回错误消息数组:

public class Error {
    public String ErrorMessage {get;set}
    public int errorNumber {get;set}
    ..etc
}
Run Code Online (Sandbox Code Playgroud)

我一直在努力清理和统一我们对这些消息的处理.我尝试使用单个函数来处理它们,例如:

void CheckErrors(List<Error> errors) {
    if(errors != null && errors.Count() > 0) 
        throw new Exception(errors.First().ErrorMessage);
}
Run Code Online (Sandbox Code Playgroud)

(实际的功能更复杂但是给出了一般的想法)

但是,事实证明,它们的每个服务都有自己(相同)的Error类定义.在C++中,我可以模拟这个函数并且它可以正常工作,或者以动态语言工作,但是在C#中我没有能够找到一种方法来做到这一点而不用10+副本的相同功能,每个在Error类型上都有不同的命名空间.

在我自己的代码中,我可以为这些类添加一个接口,但由于它不是我的代码,我认为你不能在C#中做到这一点?我可以创建一个从这些中继承的包装类并实现接口,但是我仍然坚持使用每个命名空间/服务的重复代码.

有没有更清洁的方法来处理这个?

c#

7
推荐指数
2
解决办法
644
查看次数

带有每条语句结果的 JavaScript 分析

我有一个高度递归的 JavaScript 函数,它不调用其他 JavaScript 函数。它只是一个调用自身的函数,执行一些简单的逻辑并调用系统函数(Array.sliceArray.spliceArray.push等)。

我正在尝试优化它,但是 Chrome 和 Firefox(该网站唯一可以使用的浏览器)DevTools 和 Firebug 的分析器不会显示比函数调用更具体的内容。Visual Studio 有一个很好的功能,在分析应用程序后,它会告诉您函数的每一行花费了多少执行百分比,这非常有帮助。

我尝试将函数分解为更小的函数,但随后函数调用开销会膨胀,占用了我的大部分执行时间。

javascript firebug profiling google-chrome-devtools firefox-developer-tools

6
推荐指数
1
解决办法
1439
查看次数

打字稿:声明与另一个类型相同的变量

有没有办法用另一个变量的类型声明一个变量?例如,我声明了一个具有某种类型的类成员,然后我想在同一类型的函数中声明另一个变量。但我不想修改原始声明,也不想复制它。似乎您应该能够执行以下操作:

class Foo {
    bar: {[key: string]: string[]};

    func() {
        const x: TypeOf<Foo.bar> = {};
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

我听说过专门针对函数返回类型的类似内容,但我再也找不到了...

typescript

6
推荐指数
1
解决办法
1407
查看次数

带有原始输入 API 的额外鼠标按钮

我目前使用 RawInput 来获取鼠标输入,但它似乎没有检测到超过 3 个按钮。它说它也支持 X1 和 X2,但我的鼠标似乎都没有触发它们。我环顾四周,但在谷歌上没有找到任何关于如何使用所有其他鼠标按钮的信息。如果可能的话,我想找到一些东西,比如 RawInput,可以区分多个鼠标。看来我必须将 rawinput 与 HID 设置一起使用,但我不知道是否有一个标准的多鼠标按钮 HID 我可以读取或任何东西

mouse winapi raw-input

5
推荐指数
0
解决办法
848
查看次数

HTML5 Canvas fillRect 慢

我正在尝试使用 HTML5 画布编写一个简单的 raycaster,但帧率却很糟糕。Firefox 的分析器报告我 80% 的运行时间都花费在 context2d.fillRect() 中,我将其用于地板和天花板的每列以及纹理墙壁上的每个像素。我遇到了这个问题,发现 fillRect 在 chrome 上比 1x1 px 图片快 40%,在 firefox 上快 4%。他们提到它仍然如何计算 alpha 的东西,尽管我假设如果 alpha 为 1,它会通过不透明渲染?是否有任何其他方法可以使用 javascript 进行大量矩形和像素位块传输,我应该尝试一下?

html javascript canvas

5
推荐指数
1
解决办法
2317
查看次数

Visual Studio:自动打开Intellisense

我输入一个字母后有没有办法让Intellisense(CTRL + Space)自动打开?每个代码行按CTRL + Space真的很烦我

intellisense visual-studio visual-c++

3
推荐指数
1
解决办法
5008
查看次数

以编程方式更改任务栏图标(Win32,C++)

我有一个C++ win32程序,我想在运行时编辑任务栏图标以显示有关程序的警报等,但是我对win32 api不太熟悉,而且我找不到任何东西线上.我发现的最接近的是http://www.windows-tech.info/17/52a5bfc45dac0ade.php,它告诉我如何在运行时从光盘上加载图标并进行更改.

我想在这个问题上做他们做的事:在python中使用win32在内存中创建一个图标, 但是在C++中没有外部库

c++ winapi

1
推荐指数
1
解决办法
4116
查看次数

顶点数组对象 - OSX 上的 glGenVertexArrays GL_INVALID_OPERATION

我正在尝试运行一个简单的 OpenGL 程序,但无法让它显示任何内容。我在 Mac 上使用 Swift,尽管我对 Windows 上的 OpenGL 拥有丰富的经验,但我对这两者都不熟悉。程序运行良好(没有 GL 错误或任何内容),但没有任何显示,直到我在 openGL 初始化结束时添加此内容:

var vao:GLuint=0;checkGlError();
glGenVertexArrays(1, &vao);checkGlError();
glBindVertexArray(vao);checkGlError();
Run Code Online (Sandbox Code Playgroud)

然后,一旦我调用 glGenVertexArrays(),它就会给出 GL_INVALID_OPERATION,但是文档没有提到这一点。

我担心我可能没有 GL3 上下文(实际上我更喜欢只有 GL1/2 上下文,但是 Swift 标头似乎缺少像 glBegin() 和 glColor3f() 这样的东西,所以我决定满足于GL3),所以我尝试手动请求一个:

required init?(coder: NSCoder) {
    super.init(coder: coder);
    let attribs=[NSOpenGLPFAOpenGLProfile,NSOpenGLProfileVersion3_2Core,0];
    pixelFormat=NSOpenGLPixelFormat(attributes: UnsafePointer<NSOpenGLPixelFormatAttribute>(attribs));
    openGLContext=NSOpenGLContext(format: pixelFormat, shareContext: nil);
    openGLContext.view=self;
    openGLContext.makeCurrentContext();
};
Run Code Online (Sandbox Code Playgroud)

然而,这似乎根本没有影响事情。

opengl macos opengl-3 swift

1
推荐指数
1
解决办法
1528
查看次数