小编riv*_*riv的帖子

Capturing a lambda in another lambda can violate const qualifiers

Consider the following code:

int x = 3;
auto f1 = [x]() mutable
{
    return x++;
};
auto f2 = [f1]()
{
    return f1();
};
Run Code Online (Sandbox Code Playgroud)

This will not compile, because f1() is not const, and f2 is not declared as mutable. Does this mean that if I have a library function that accepts an arbitrary function argument and captures it in a lambda, I always need to make that lambda mutable, because I don't know what users can pass in? …

c++ lambda

26
推荐指数
2
解决办法
1637
查看次数

生成器不是迭代器?

我有一个生成器(一个产生东西的函数),但是当试图将它传递给gensim.Word2Vec我时,我得到以下错误:

TypeError:您不能将生成器作为句子参数传递.尝试一个迭代器.

发生器不是一种迭代器吗?如果没有,我如何从中制作迭代器?

看一下库代码,它似乎只是简单地迭代句子for x in enumerate(sentences),这对我的生成器来说效果很好.那么是什么导致错误?

python gensim word2vec

20
推荐指数
2
解决办法
4361
查看次数

模糊赋值运算符

我有两个类,其中一个代表一个字符串,另一个可以转换为字符串:

class A {
public:
  A() {}
  A(const A&) {}
  A(const char*) {}

  A& operator=(const A&) { return *this; }
  A& operator=(const char*) { return *this; }

  char* c;
};
class B {
public:
  operator const A&() const {
    return a;
  }
  operator const char*() const {
    return a.c;
  }

  A a;
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做

B x;
A y = x;
Run Code Online (Sandbox Code Playgroud)

它触发复制构造函数,编译很好.但如果我这样做

A y;
y = x;
Run Code Online (Sandbox Code Playgroud)

它抱怨模糊的任务,不能在=(A&)和之间做出选择=(char*).为什么不同?

c++

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

如何在GitHub中查看单个文件中的更改?

我的上一次提交更新了~300个文件,差异页面显示Sorry, we could not display the entire diff because it was too big并且速度很慢,我几乎无法滚动它.如何查看单个文件的更改?

查看特定文件时,我希望有一个链接将其与以前的版本进行比较,但我找不到任何文件.我错过了什么或为什么不是那么重要的功能?

git github

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

VS2013 - 已定义静态const

我有以下代码(简化),它在gcc中编译很好,但在VS中出错:

// main.cpp
#include "test.h"
int main() {
  return 0;
}

// test.h
#pragma once
class Test {
  static const int TEST = 3;
};

// test.cpp
#include "test.h"
const int Test::TEST;
Run Code Online (Sandbox Code Playgroud)

错误:

main.obj : error LNK2005: "private: static int const Test::TEST" (?TEST@Test@@0HB) already defined in test.obj
Run Code Online (Sandbox Code Playgroud)

它是VS错误还是gcc错误地允许我明确定义静态const成员?

更新:C++标准(9.4.2.3)中找到:

如果非易失性const静态数据成员是整数类型或枚举类型,则其在类定义中的声明可以指定一个大括号或大小为初始化器,其中作为赋值表达式的每个initializer子句都是一个常量表达式(5.20) ).可以使用constexpr说明符在类定义中声明文字类型的静态数据成员; 如果是这样,它的声明应指定一个大括号或等于初始化器,其中作为赋值表达式的每个initializer子句都是一个常量表达式.[注意:在这两种情况下,成员可能会出现在常量表达式中.- 结束注释] 如果程序中使用了odr-used(3.2),并且命名空间作用域定义不包含初始化程序,则仍应在名称空间作用域中定义该成员.

更新#2:发现了一个错误报告,声称它已在下一个主要版本中修复.

c++ visual-studio visual-studio-2013

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

Chrome中的虚线

出于某种原因,当使用虚线边框样式制作线条时,Chrome会将结尾呈现为双点,这看起来很糟糕,特别是在短线上:

.text {
  border-bottom: 2px dotted #000;
}
Run Code Online (Sandbox Code Playgroud)
<span class="text">Hi</span><br/>
<span class="text">lll</span><br/>
<span class="text">22</span><br/>
Run Code Online (Sandbox Code Playgroud)

即使是简单的事情border-bottom: 2px dotted #000;也无效.我看到一些文章建议将左/右边框设置为透明,但看起来更糟糕的是它切掉了点的小角落.

不过,它在Firefox中看起来很好.有没有办法让它在Chrome中看起来不错,或者我运气不好?

css border dotted-line

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

如何在列表中存储自动删除的期货

我有一些需要异步执行的任务,并且仍然有正在运行的任务无法关闭服务器。因此,我试图将返回的期货存储std::async在一个列表中,但我也不想获得一个无限增长的列表。因此,我想在期货完成后将其删除。

这大致就是我要做的事情:

// this is a member of the server class
std::list<std::future<void>> pending;

std::list<std::future<void>>::iterator iter = ???;

pending.push_back( std::async( std::launch::async, [iter]()
{
    doSomething();
    pending.remove( iter );
} );
Run Code Online (Sandbox Code Playgroud)

在这里,iter需要指向新插入的元素,但是在插入元素之前(没有迭代器)或之后(因为它是按值传递给lambda的),我都无法获得它。我可以创建一个shared_ptr存储迭代器的方法,但这似乎太过分了。

有更好的模式吗?

更新:似乎还有另一个问题。当将来尝试将自己从列表中删除时,它实际上是在等待自己完成,从而锁定了所有内容。糟糕!

最重要的是,列表析构函数调用元素析构函数之前清空列表。

c++ future c++17

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

refs 是否应该列为 useEffect 等的依赖项?

据我了解, useRef 返回的容器始终相同 - 但在 useEffect 和类似函数中引用它们会导致 eslint exhausive-deps 警告。在这种情况下忽略警告是否安全?有什么好方法可以避免警告堵塞输出日志以及禁用行注释堵塞我的代码?或者我应该将它们放入依赖项列表中以使 eslint 满意?

javascript reactjs eslint react-hooks

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

PHP - unpack as unsigned int

如何将二进制字符串转换为unsigned int?

我正在做

$id = unpack('V', substr($dir, $mid * 12, 4))[1];
echo $id . '<br/>';
Run Code Online (Sandbox Code Playgroud)

V根据文件,在哪里

unsigned long(总是32位,小端字节顺序)

它打印-992455690.这怎么可能?

更新:在文档中找到:

请注意,PHP在内部将整数值存储为signed.如果解压缩一个大的unsigned long并且它与PHP内部存储的值大小相同,那么即使指定了unsigned解包,结果也将为负数.

所以现在的问题是,V如果格式与签名版本相同,那么格式的重点是什么,而不是造成混淆?

php

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

调试二进制WebSocket

我正在尝试使用websockets调试Web应用程序以传递二进制数据。Chrome DevTools具有这个方便的网络选项卡,可以显示websocket框架...,只是显示了二进制框架,仅Binary Frame (Opcode 2)此而已。我不知道为什么在提供更多信息如此容易的情况下他们为什么会停下来。我什至从2年前就发现了对此功能拉动请求

无论如何,我正在寻找替代品。我还想为二进制数据添加一些自定义解析逻辑。

到目前为止,我找到的最好的解决方案-断开devtools窗口,为devtools打开另一个devtools(在Elements选项卡中按Ctrl + Shift + I),导航到Network选项卡的源文件,在设置框架文本的行上放置一个断点内容,然后在编辑断点菜单中添加JS代码以修改局部变量。我得到了类似的东西,虽然非常完美,但是设置起来很麻烦,并且很难与更复杂的解析代码一起使用。

在此处输入图片说明

理想情况下,可以通过chrome扩展来完成类似的事情,但是devtools扩展似乎只能捕获常规的网络请求。

另一种选择是使用Wireshark,但这需要SSL密钥日志,然后没有清晰的文档说明如何使自定义解剖器解析SSL解码器的输出而不是原始TCP数据(这里有一个问题,没有答案)。此外,我有大量的JS代码用于解析二进制数据,将所有内容转换为LUA会很痛苦。

更新:我设法使用调试器API对此进行了扩展。这需要创建自己的列出框架的UI,但最终它会按照我的期望工作。

google-chrome wireshark websocket google-chrome-devtools

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