小编ext*_*ext的帖子

无窗口OpenGL

我想有一个没有窗口的OpenGL上下文(在带有Xorg和Windows的GNU/linux上).我不会去渲染什么,但只有通话功能一样glGetString,glCompileShader和类似的.

除了创建一个隐藏的窗口之外,我已经完成了一些有用的但没有任何有用的东西.这似乎是对我的黑客攻击.

那么有没有人有更好的想法(对于任何平台)?

编辑:使用Xorg,我能够创建并将OpenGL上下文附加到根窗口:

#include<stdio.h>
#include<stdlib.h>
#include<X11/X.h>
#include<X11/Xlib.h>
#include<GL/gl.h>
#include<GL/glx.h>

int main(int argc, const char* argv[]){
  Display *dpy;
  Window root;
  GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
  XVisualInfo *vi;
  GLXContext glc;

  dpy = XOpenDisplay(NULL);

  if ( !dpy ) {
    printf("\n\tcannot connect to X server\n\n");
    exit(0);
  }

  root = DefaultRootWindow(dpy);
  vi = glXChooseVisual(dpy, 0, att);

  if (!vi) {
    printf("\n\tno appropriate visual found\n\n");
    exit(0);
  }

  glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
  glXMakeCurrent(dpy, root, glc);

  printf("vendor: …
Run Code Online (Sandbox Code Playgroud)

c c++ opengl

32
推荐指数
2
解决办法
6317
查看次数

开玩笑的typescript属性模拟类型不存在

当使用jest.fn()添加模拟通常可以访问.mock属性来访问的详细信息,如电话,类似这样:

test('not working', () => {
    const foo = new Foo();
    foo.addListener = jest.fn();
    foo.func(); // will call addListener with a callback
    const callback = foo.addListener.mock.calls[0][0];
    expect(callback()).toEqual(1); // test the callback
});
Run Code Online (Sandbox Code Playgroud)

用打字稿而不是普通的javascript实现测试时,出现错误:

错误TS2339:类型'((callback:()=> number)=> void'不存在属性'mock'。

我可以通过强制转换来消除错误,any但是肯定有更好的方法:

const callback = (foo.addListener as any).mock.calls[0][0];
Run Code Online (Sandbox Code Playgroud)

在这个简单的代码中,可以使用重写模拟程序以存储参数,jest.fn(fn => { callback = fn; });但是使用时会发生相同的错误foo.addListener.mockClear(),无法以相同的方式进行重做。

那么如何摆脱错误,最好不丢失类型安全性呢?

typescript jestjs

10
推荐指数
4
解决办法
7934
查看次数

相当于MSVC的open_memstream

我在我的库中使用open_memstream,但我想将此库移植到MSVC.似乎没有可用的等效功能,但有足够类似的功能吗?

什么open_memstream确实是需要一个char**目的地和大小,并返回你多写,数据被存储在一个动态分配的缓冲区(从焦炭**参数访问)的文件*.关闭FILE时,char**包含写入流的数据.这使得构建大型复杂字符串流变得简单.

虽然可以从memstream读取和搜索,但我只能写入它.

有没有办法在MSVC中打开类似的内存FILE流?此外,这是纯C,没有C++.

c posix visual-c++

9
推荐指数
2
解决办法
2353
查看次数

来自-Wcast-qual的显式忽略警告:从指针目标类型抛出'__ attribute __((const))'限定符

static char buf[8];
void foo(){
    const char* ptr = buf;
    /* ... */
    char* q = (char*)ptr;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将生成"warning: cast discards ‘__attribute__((const))’ qualifier from pointer target type [-Wcast-qual]".我喜欢,-Wcast-qual因为它可以帮助我不小心写入内存,我不应该写.

但是现在我想抛弃const只出现一次(不是整个文件或项目).它指向的内存是可写的(就像buf上面一样).我宁愿不删除const,ptr因为它在别处使用并且保持指针(一个const和一个非const)似乎是一个更糟糕的主意.

c gcc warnings

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

仅当 git remote 不存在时才添加

脚本是否有一种简单的方法来检测远程是否已存在并仅在不存在时才添加它?管道命令还是瓷旗?

git remote add foo https://example.net使用现有遥控器运行时,我得到:

fatal: remote foo already exists.
Run Code Online (Sandbox Code Playgroud)

理想情况下会有一个标志,例如--if-not-existsor--update-if-exists但我在文档中找不到任何标志。

我正在考虑 grepping 的输出,git remote但有更好的方法吗?

git

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

ESM 导出 * 除模块外

鉴于我有两个导入,其中有很多命名导出(太多了,无法将它们全部写出来),并且我想重新导出它们,除了其中一些。就我而言,这是因为一些出口发生冲突。

作为我想要存档的示例,假设我们有两个文件:

foo.js

export const a = 1;
export const b = 2;
Run Code Online (Sandbox Code Playgroud)

bar.js

export const b = 1;
export const c = 3;
Run Code Online (Sandbox Code Playgroud)

如果我想使用 CommonJS 聚合并重新导出它们,我可以这样做:

/* use rest destructuring to put everything except "b" into variable "foo" */
const { b, ...foo } = require("./foo"); 
const bar = require("./bar");

module.exports = {
    ...foo,
    ...bar
};
Run Code Online (Sandbox Code Playgroud)

当我使用打字稿时,我得到的最接近的是以export = { ... }类似的方式使用:

import * as foo from "./foo";
import * as bar from "./bar";

const { …
Run Code Online (Sandbox Code Playgroud)

javascript typescript es6-modules

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

Docker swarm 获取部署状态

在运行docker stack deploy将一些服务部署到 swarm 后,是否有一种方法可以以编程方式测试所有容器是否正确启动?

目的是在临时 CI/CD 管道中验证容器是否确实正在运行并且在启动时没有失败。通过 禁用重新启动restart_policy

我在看docker stack services,该replicas专栏对此有用吗?

$ docker stack services --format "{{.ID}} {{.Replicas}}" my-stack-name
lxoksqmag0qb 0/1
ovqqnya8ato4 0/1
Run Code Online (Sandbox Code Playgroud)

docker docker-swarm

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