小编liu*_*rry的帖子

所有可能的GOOS价值?

如果我做对了,GOOS确定编译源代码时.

为了更好地支持多个操作系统,我对GOOS可能的内容感兴趣.

当然,它可能有无限的可能性,因为Go是开源的.所以我真正想要的是一个"共同列表".

已知值为:

  • windows
  • linux
  • darwinfreebsdunix?我知道其中至少有一个必须存在.

cross-compiling go

51
推荐指数
3
解决办法
4万
查看次数

如何知道Golang网络包中的TCP连接是否已关闭?

我是Golang的新手.

我正在实现一个小型TCP服务器,如何知道我的一个客户是否已关闭?我应该尝试阅读或写入并检查错误是否为零?

tcp go

48
推荐指数
3
解决办法
6万
查看次数

绘制重叠的半透明线条,没有可见的重叠

我正在使用HTML5画布开发一个画家程序.我创建了一个绘图工具,用户拖动并移动鼠标.

我有一个关注mousemove事件的听众:

Painter.mainCanvas.beginPath();
Painter.mainCanvas.moveTo(Painter.lastX, Painter.lastY);
Painter.lastX = e.offsetX;
Painter.lastY = e.offsetY;
Painter.mainCanvas.lineTo(Painter.lastX, Painter.lastY);
Painter.mainCanvas.stroke();
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我将全局Alpha设置为<1.使用此方法绘制时,结束点也是起点.所以点画了两次.而且因为我们有透明的颜色,点现在有不同的颜色与其他点在一起.

我尝试了另一种方法,当mousemove触发时,它只使用lineTo()stroke()当mouseup触发时.

这解决了双重绘图问题,但也引入了一个新问题:当用户打算两次绘制相同的点时,即没有鼠标的交叉线时,点将不会被绘制两次.因为lineTo()函数不会在没有笔划的情况下绘制两次点.

html5 canvas vector-graphics

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

C++数组中初始化列表的类型是什么?

像这样的代码可以正常工作:

char str[] = {'a', 'b', '\0'};
Run Code Online (Sandbox Code Playgroud)

左边是一个自动变量(数组).

这样的代码可以工作:

char *str = {'a', 'b', '\0'};
Run Code Online (Sandbox Code Playgroud)

左侧是指针.指针指向未知空间,因此这将失败.

我的问题是,右侧的类型是什么?

在C++ 11中,初始化列表变为std::initializer_list.但是旧的C++ 03怎么样?

c c++

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

html5 canvas:一起画画

现在我正在使用HTML5画布开发一个绘画聊天程序,我遇到了两个或更多用户同时在同一个画布上绘制的问题.

Canvas每个属性只有一个实例,只有一个strokeStyle,一个fillStyle,依此类推.当两个用户在同一画布上绘图时; 随之而来的是混乱.

我尝试使用更多具有相同定位的画布,但何时以及如何交换两幅画布的数据是一个问题.

有没有人知道其他任何方法,或者我如何正确地在画布之间交换数据?

编辑:

我想我说的不够清楚.现在我有了canvas,来自服务器的消息通过socket.io,手头有不同的绘画请求.当用户移动鼠标绘制线条时,画布现在获得lineWidth,strokeStyle,globalOpacity.但是,由于画布一次只能有一个画家,因此无法同时绘制服务器的绘制请求,包括另一种画家.如果我们有足够的用户,那么这幅画就不会流畅.

我准备编写一个队列或类似的东西来实现该功能,但可能还有其他方法可以实现.

html5 canvas

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

如何在C++ 11中测试lambda

通常,要测试指针是否指向函数,使用std::is_function就足够了.

但是,它无法与lambda一起使用.因为lambda是一个对象operator().

现在我必须使用它们is_functionis_object检查一个是否像函数一样工作,如下所示:

std::is_function<decltype(f)>::value || std::is_object<decltype(f)>::value

所以我想知道是否有更好的方法来测试一个是否是lambda?

编辑:

相关代码:

template<typename Func>
void deferJob(Func f, int ms=2000)
{
    if(! std::is_function<decltype(f)>::value
            && ! std::is_object<decltype(f)>::value){
        qDebug()<<"Not function!";
        return;
    }
    QTimer* t = new QTimer;
    t->setSingleShot(true);
    QObject::connect(t, &QTimer::timeout,
            [&f, t](){
        qDebug()<<"deferJob";
        f();
        t->deleteLater();
    });
    t->start(ms);
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:

类似的问题:C++元函数确定一个类型是否可调用

c++ lambda c++11

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

如何匹配variadic模板中的空参数包

我有代码:

template<typename T>
void loadBrush_sub_impl()
{
    // do some work here
}

template<typename T, typename... Targs>
void loadBrush_sub()
{
    loadBrush_sub_impl<T>();
    loadBrush_sub<Targs...>();
}

template<>
void loadBrush_sub<void>()
{
}

// BasicBrush, BinaryBrush, SketchBrush, BasicEraser and MaskBased are class
loadBrush_sub<BasicBrush, BinaryBrush, SketchBrush, BasicEraser, MaskBased, void>();
Run Code Online (Sandbox Code Playgroud)

编译时这是正确的.但是,我真的想放弃void电话loadBrush_sub<BasicBrush, BinaryBrush, SketchBrush, BasicEraser, MaskBased, void>();.

但是,这会导致:

..\CanvasEngine\canvasengine.cpp: In instantiation of 'void loadBrush_sub() [with T = MaskBased; Targs = {}]':
..\CanvasEngine\canvasengine.cpp:36:5:   recursively required from 'void loadBrush_sub() [with T = BinaryBrush; Targs = {SketchBrush, BasicEraser, …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-functions variadic-templates

6
推荐指数
2
解决办法
6534
查看次数

如何在C++ 11中或在boost的帮助下初始化固定大小的数组并使用constexpr函数分配元素

可能重复:
在C++编译时以编程方式创建静态数组

我有很多数据存储在固定数组中,其元素取决于位置.可以在编译时计算每个元素的值.

我的代码几乎就像:

int fun(int p) // maybe constexpr
{
    return 0x1<<p;
}

int a[17] = {
    repeat_fun_from_0_to_16();
};
Run Code Online (Sandbox Code Playgroud)

因为所有的值都可以在编译时确定,所以应该有办法做到这一点,我想.

我还检查了repeat()boost.assignment中有一个,但不知道如何在这种情况下使用它.

c++ boost c++11

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

如何处理 Node.js 中的“read ETIMEDOUT”?

我有一个使用 Node.js 的发布/订阅模型将数据从一个客户端传输到另一个客户端。此外,服务器还记录收到的所有内容并将其发送给新客户端。

但是,某些数据在传输时损坏,并且出现如下错误:

Error with socket!
{ [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write' }
Error with socket!
{ [Error: read ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' }
Run Code Online (Sandbox Code Playgroud)

我不知道如何正确处理这些错误。看来客户端已经宕机了。

由于服务器只是像服务器一样的代理,它并不真正知道数据意味着什么。我不知道如何在遇到这些错误之前验证每个数据包。

这是我的代码:

// server is an object inheriting from net.Server
server.on('listening', function() {
    var port = server.address().port;
}).on('connection', function(cli) {
    cli.socketBuf = new Buffers();
    cli.commandStarted = false;
    cli.dataSize = 0;
    cli.setKeepAlive(true, 10*1000);
    cli.setNoDelay(true);
    cli.on('connect', function() {
        server.clients.push(cli);
    }).on('close', function() {
        var index = server.clients.indexOf(cli);
        server.clients.splice(index, 1);
    }).on('data', …
Run Code Online (Sandbox Code Playgroud)

proxy networking real-time publish-subscribe node.js

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

在没有 std 的情况下将 *mut u8 转换为 &amp;[u8]

我正在为 WebAssembly 编写 Rust 代码来处理来自 JavaScript 领域的字符串。

由于 WebAssembly 没有真正的字符串类型,我试图传递一个指向 WebAssembly 内存对象的指针,该对象指向 UTF-8 编码的字符串。

#[no_mangle]
pub extern "C" fn check(ptr: *mut u8, length: u32) -> u32 {
    unsafe {
        let buf: &[u8] = std::slice::from_raw_parts(ptr, length as usize);
        // do some operations on buf
        0
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,预计我必须依赖std板条箱,它将最终二进制文件膨胀到大约 600KB。

有没有办法摆脱std::slice::from_raw_parts但仍然能够将原始指针转换为切片?

rust webassembly

4
推荐指数
2
解决办法
2433
查看次数