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以外的位置?
我试图从泛型类型继承,以便我可以在层次结构中插入一个类型:
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更改为其他类).这不可能吗?
在过去,每当我需要创建一个类的实例时,我都会使用new在堆上分配它(除了stl类和数学类,如vec3和mat4).
但是,我只是批评我的一些代码,并意识到技术上我可以只是在堆栈上制作这些类.它们不是很大,不需要在当前范围之外进行修改等.当我(偶尔)需要将它们传递给另一个函数时,我可以像使用指针一样轻松地使用引用.
在过去,我总是默认在堆上进行分配,并且在某些情况下仅使用堆栈,但是现在我想知道默认情况下在堆栈上分配是否更好,并且仅在使用堆时
这也提出了一个问题:一个类有多大(大致)在堆栈上合理分配?(假设我们正在努力,至少是智能手机,并进入高端桌面)我只是担心不必要的堆栈大小限制?(可能,只要我们不讨论大型数组,并且没有类甚至接近千字节)
我试图在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?
我正在使用一个客户端的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#中做到这一点?我可以创建一个从这些中继承的包装类并实现接口,但是我仍然坚持使用每个命名空间/服务的重复代码.
有没有更清洁的方法来处理这个?
我有一个高度递归的 JavaScript 函数,它不调用其他 JavaScript 函数。它只是一个调用自身的函数,执行一些简单的逻辑并调用系统函数(Array.slice、Array.splice、Array.push等)。
我正在尝试优化它,但是 Chrome 和 Firefox(该网站唯一可以使用的浏览器)DevTools 和 Firebug 的分析器不会显示比函数调用更具体的内容。Visual Studio 有一个很好的功能,在分析应用程序后,它会告诉您函数的每一行花费了多少执行百分比,这非常有帮助。
我尝试将函数分解为更小的函数,但随后函数调用开销会膨胀,占用了我的大部分执行时间。
javascript firebug profiling google-chrome-devtools firefox-developer-tools
有没有办法用另一个变量的类型声明一个变量?例如,我声明了一个具有某种类型的类成员,然后我想在同一类型的函数中声明另一个变量。但我不想修改原始声明,也不想复制它。似乎您应该能够执行以下操作:
class Foo {
bar: {[key: string]: string[]};
func() {
const x: TypeOf<Foo.bar> = {};
....
}
}
Run Code Online (Sandbox Code Playgroud)
我听说过专门针对函数返回类型的类似内容,但我再也找不到了...
我目前使用 RawInput 来获取鼠标输入,但它似乎没有检测到超过 3 个按钮。它说它也支持 X1 和 X2,但我的鼠标似乎都没有触发它们。我环顾四周,但在谷歌上没有找到任何关于如何使用所有其他鼠标按钮的信息。如果可能的话,我想找到一些东西,比如 RawInput,可以区分多个鼠标。看来我必须将 rawinput 与 HID 设置一起使用,但我不知道是否有一个标准的多鼠标按钮 HID 我可以读取或任何东西
我正在尝试使用 HTML5 画布编写一个简单的 raycaster,但帧率却很糟糕。Firefox 的分析器报告我 80% 的运行时间都花费在 context2d.fillRect() 中,我将其用于地板和天花板的每列以及纹理墙壁上的每个像素。我遇到了这个问题,发现 fillRect 在 chrome 上比 1x1 px 图片快 40%,在 firefox 上快 4%。他们提到它仍然如何计算 alpha 的东西,尽管我假设如果 alpha 为 1,它会通过不透明渲染?是否有任何其他方法可以使用 javascript 进行大量矩形和像素位块传输,我应该尝试一下?
我输入一个字母后有没有办法让Intellisense(CTRL + Space)自动打开?每个代码行按CTRL + Space真的很烦我
我有一个C++ win32程序,我想在运行时编辑任务栏图标以显示有关程序的警报等,但是我对win32 api不太熟悉,而且我找不到任何东西线上.我发现的最接近的是http://www.windows-tech.info/17/52a5bfc45dac0ade.php,它告诉我如何在运行时从光盘上加载图标并进行更改.
我想在这个问题上做他们做的事:在python中使用win32在内存中创建一个图标, 但是在C++中没有外部库
我正在尝试运行一个简单的 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)
然而,这似乎根本没有影响事情。